add microservice service

This commit is contained in:
DmsAnhr 2026-01-28 12:45:19 +07:00
parent 04e1199ee9
commit d4eaf4f388
4 changed files with 56 additions and 3 deletions

View File

@ -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")

View File

@ -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(

View File

@ -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()

View File

@ -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())