add microservice service
This commit is contained in:
parent
04e1199ee9
commit
d4eaf4f388
|
|
@ -1,7 +1,7 @@
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from fastapi import Depends, HTTPException, Request, status
|
from fastapi import Depends, HTTPException, Request, status, Header
|
||||||
from fastapi.security import OAuth2PasswordBearer
|
from fastapi.security import OAuth2PasswordBearer
|
||||||
from fastapi.security.utils import get_authorization_scheme_param
|
from fastapi.security.utils import get_authorization_scheme_param
|
||||||
from jose import JWTError
|
from jose import JWTError
|
||||||
|
|
@ -98,3 +98,9 @@ async def get_current_active_admin(current_user: UserSchema = Depends(get_curren
|
||||||
)
|
)
|
||||||
|
|
||||||
return current_user
|
return current_user
|
||||||
|
|
||||||
|
async def verify_internal_service(
|
||||||
|
x_service_key: str = Header(...)
|
||||||
|
):
|
||||||
|
if x_service_key != settings.SERVICE_KEY:
|
||||||
|
raise HTTPException(status_code=403, detail="Forbidden")
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from typing import List
|
||||||
|
|
||||||
from fastapi import APIRouter, Body, Depends, status
|
from fastapi import APIRouter, Body, Depends, status
|
||||||
|
|
||||||
from app.api.dependencies.auth import get_current_active_user, get_payload
|
from app.api.dependencies.auth import get_current_active_user, get_payload, verify_internal_service
|
||||||
from app.api.dependencies.factory import Factory
|
from app.api.dependencies.factory import Factory
|
||||||
from app.core.data_types import UUID7Field
|
from app.core.data_types import UUID7Field
|
||||||
from app.core.params import CommonParams
|
from app.core.params import CommonParams
|
||||||
|
|
@ -83,6 +83,16 @@ async def create_mapset(
|
||||||
mapset = await service.create(user, data.dict())
|
mapset = await service.create(user, data.dict())
|
||||||
return mapset
|
return mapset
|
||||||
|
|
||||||
|
@router.post("/internal/mapsets", response_model=MapsetSchema)
|
||||||
|
async def create_mapset_internal(
|
||||||
|
data: MapsetCreateSchema,
|
||||||
|
_: None = Depends(verify_internal_service),
|
||||||
|
mapset_service: MapsetService = Depends(Factory().get_mapset_service),
|
||||||
|
):
|
||||||
|
return await mapset_service.create_system(None, data.dict())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@router.post("/mapsets/color_scale", status_code=status.HTTP_200_OK)
|
@router.post("/mapsets/color_scale", status_code=status.HTTP_200_OK)
|
||||||
async def create_color_scale(
|
async def create_color_scale(
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
import os
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
|
|
@ -80,6 +81,9 @@ class Settings(BaseSettings):
|
||||||
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", case_sensitive=True, extra="allow")
|
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", case_sensitive=True, extra="allow")
|
||||||
|
|
||||||
|
|
||||||
|
# Microservice Key
|
||||||
|
SERVICE_KEY : str
|
||||||
|
|
||||||
@lru_cache
|
@lru_cache
|
||||||
def get_settings() -> Settings:
|
def get_settings() -> Settings:
|
||||||
return Settings()
|
return Settings()
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,6 @@ from app.core.exceptions import NotFoundException, UnprocessableEntity
|
||||||
|
|
||||||
from . import BaseService
|
from . import BaseService
|
||||||
|
|
||||||
|
|
||||||
class MapsetService(BaseService[MapsetModel, MapsetRepository]):
|
class MapsetService(BaseService[MapsetModel, MapsetRepository]):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
|
@ -208,6 +207,40 @@ class MapsetService(BaseService[MapsetModel, MapsetRepository]):
|
||||||
|
|
||||||
return mapset
|
return mapset
|
||||||
|
|
||||||
|
|
||||||
|
async def create_system(self, user_id: UUID | None, data: Dict[str, Any]) -> MapsetModel:
|
||||||
|
now = func.timezone("Asia/Jakarta", func.now())
|
||||||
|
|
||||||
|
data["created_by"] = user_id
|
||||||
|
data["updated_by"] = user_id
|
||||||
|
data["created_at"] = now
|
||||||
|
data["updated_at"] = now
|
||||||
|
|
||||||
|
track_note = data.pop("notes", None)
|
||||||
|
source_id = data.pop("source_id", None)
|
||||||
|
|
||||||
|
mapset = await super().create(data)
|
||||||
|
|
||||||
|
if source_id:
|
||||||
|
if isinstance(source_id, (str, UUID)):
|
||||||
|
source_id = [source_id]
|
||||||
|
|
||||||
|
await self.source_usage_repository.bulk_create(
|
||||||
|
[{"mapset_id": mapset.id, "source_id": sid} for sid in source_id]
|
||||||
|
)
|
||||||
|
|
||||||
|
await self.history_repository.create(
|
||||||
|
{
|
||||||
|
"mapset_id": mapset.id,
|
||||||
|
"validation_type": mapset.status_validation,
|
||||||
|
"notes": track_note,
|
||||||
|
"user_id": user_id,
|
||||||
|
"timestamp": now,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return mapset
|
||||||
|
|
||||||
async def update(self, id: UUID, user: UserSchema, data: Dict[str, Any]) -> MapsetModel:
|
async def update(self, id: UUID, user: UserSchema, data: Dict[str, Any]) -> MapsetModel:
|
||||||
data["updated_by"] = user.id
|
data["updated_by"] = user.id
|
||||||
data["updated_at"] = func.timezone('Asia/Jakarta', func.now())
|
data["updated_at"] = func.timezone('Asia/Jakarta', func.now())
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user