add microservice service
This commit is contained in:
parent
04e1199ee9
commit
d4eaf4f388
|
|
@ -1,7 +1,7 @@
|
|||
from datetime import datetime
|
||||
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.utils import get_authorization_scheme_param
|
||||
from jose import JWTError
|
||||
|
|
@ -98,3 +98,9 @@ async def get_current_active_admin(current_user: UserSchema = Depends(get_curren
|
|||
)
|
||||
|
||||
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 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.core.data_types import UUID7Field
|
||||
from app.core.params import CommonParams
|
||||
|
|
@ -83,6 +83,16 @@ async def create_mapset(
|
|||
mapset = await service.create(user, data.dict())
|
||||
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)
|
||||
async def create_color_scale(
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import os
|
||||
from functools import lru_cache
|
||||
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")
|
||||
|
||||
|
||||
# Microservice Key
|
||||
SERVICE_KEY : str
|
||||
|
||||
@lru_cache
|
||||
def get_settings() -> Settings:
|
||||
return Settings()
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ from app.core.exceptions import NotFoundException, UnprocessableEntity
|
|||
|
||||
from . import BaseService
|
||||
|
||||
|
||||
class MapsetService(BaseService[MapsetModel, MapsetRepository]):
|
||||
def __init__(
|
||||
self,
|
||||
|
|
@ -208,6 +207,40 @@ class MapsetService(BaseService[MapsetModel, MapsetRepository]):
|
|||
|
||||
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:
|
||||
data["updated_by"] = user.id
|
||||
data["updated_at"] = func.timezone('Asia/Jakarta', func.now())
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user