This commit is contained in:
itqop 2025-10-18 16:08:12 +03:00
parent ce5bab1f29
commit f788127716
7 changed files with 40 additions and 17 deletions

View File

@ -3,10 +3,11 @@
from fastapi import APIRouter, Depends, HTTPException
from typing import Annotated
from hubgw.api.deps import get_luckperms_service, verify_api_key
from hubgw.api.deps import get_luckperms_service, get_user_service, verify_api_key
from hubgw.services.luckperms_service import LuckPermsService
from hubgw.services.users_service import UserService
from hubgw.schemas.luckperms import (
LuckPermsPlayer, LuckPermsGroup, LuckPermsUserPermission,
LuckPermsPlayer, LuckPermsGroup, LuckPermsUserPermission,
LuckPermsPlayerWithPermissions, LuckPermsPlayerCreateRequest
)
from hubgw.core.errors import AppError, create_http_exception
@ -82,11 +83,12 @@ async def get_player_with_permissions(
@router.post("/players", response_model=LuckPermsPlayer, status_code=201)
async def create_player(
request: LuckPermsPlayerCreateRequest,
service: Annotated[LuckPermsService, Depends(get_luckperms_service)],
luckperms_service: Annotated[LuckPermsService, Depends(get_luckperms_service)],
user_service: Annotated[UserService, Depends(get_user_service)],
_: Annotated[str, Depends(verify_api_key)]
):
"""Create a new player in LuckPerms."""
try:
return await service.create_player(request)
return await luckperms_service.create_player(request, user_service)
except AppError as e:
raise create_http_exception(e)

View File

@ -3,8 +3,10 @@
from fastapi import APIRouter, Depends
from typing import Annotated, Optional
from hubgw.api.deps import get_whitelist_service, verify_api_key
from hubgw.api.deps import get_whitelist_service, get_luckperms_service, get_user_service, verify_api_key
from hubgw.services.whitelist_service import WhitelistService
from hubgw.services.luckperms_service import LuckPermsService
from hubgw.services.users_service import UserService
from hubgw.schemas.whitelist import (
WhitelistAddRequest, WhitelistRemoveRequest, WhitelistCheckRequest,
WhitelistEntry, WhitelistCheckResponse, WhitelistListResponse, WhitelistQuery
@ -18,11 +20,13 @@ router = APIRouter()
async def add_player(
request: WhitelistAddRequest,
service: Annotated[WhitelistService, Depends(get_whitelist_service)],
luckperms_service: Annotated[LuckPermsService, Depends(get_luckperms_service)],
user_service: Annotated[UserService, Depends(get_user_service)],
_: Annotated[str, Depends(verify_api_key)]
):
"""Add player to whitelist."""
try:
return await service.add_player(request)
return await service.add_player(request, luckperms_service, user_service)
except AppError as e:
raise create_http_exception(e)

View File

@ -2,8 +2,6 @@
from pydantic import BaseModel
from typing import Optional
from datetime import datetime
from uuid import UUID
from hubgw.schemas.common import BaseSchema

View File

@ -7,4 +7,4 @@ from typing import Optional
class GetUserGameIdResponse(BaseModel):
"""Response schema for getting user's game ID."""
game_id: Optional[str]
game_id: str

View File

@ -10,7 +10,7 @@ class WhitelistAddRequest(BaseModel):
"""Whitelist add request schema."""
player_name: str
player_uuid: Optional[str] = None
player_uuid: str
added_by: str
added_at: datetime
expires_at: Optional[datetime] = None

View File

@ -1,15 +1,16 @@
"""LuckPerms service."""
from loguru import logger
from sqlalchemy.ext.asyncio import AsyncSession
from typing import List
from uuid import uuid3, NAMESPACE_OID
from typing import List, TYPE_CHECKING
from hubgw.repositories.luckperms_repo import LuckPermsRepository
from hubgw.schemas.luckperms import (
LuckPermsPlayer, LuckPermsGroup, LuckPermsUserPermission,
LuckPermsPlayer, LuckPermsGroup, LuckPermsUserPermission,
LuckPermsPlayerWithPermissions, LuckPermsPlayerCreateRequest
)
from hubgw.core.errors import NotFoundError, AlreadyExistsError
from hubgw.services.users_service import UserService
class LuckPermsService:
@ -56,13 +57,14 @@ class LuckPermsService:
return LuckPermsPlayerWithPermissions.model_validate(player, permissions=permission_schemas)
async def create_player(self, request: LuckPermsPlayerCreateRequest) -> LuckPermsPlayer:
async def create_player(self, request: LuckPermsPlayerCreateRequest, user_service: UserService) -> LuckPermsPlayer:
"""Create a new player in LuckPerms."""
existing_player = await self.repo.get_player_by_username(request.username)
if existing_player:
raise AlreadyExistsError(f"Player with username {request.username} already exists")
uuid = str(uuid3(NAMESPACE_OID, request.username))
user_game_id = await user_service.get_game_id_by_name(request.username)
uuid = user_game_id.game_id
created_player = await self.repo.create_player(
uuid=uuid,
@ -70,4 +72,4 @@ class LuckPermsService:
primary_group=request.primary_group
)
return LuckPermsPlayer.model_validate(created_player)
return created_player

View File

@ -8,7 +8,10 @@ from hubgw.schemas.whitelist import (
WhitelistAddRequest, WhitelistRemoveRequest, WhitelistCheckRequest,
WhitelistEntry as SchemaWhitelistEntry, WhitelistCheckResponse, WhitelistListResponse, WhitelistQuery
)
from hubgw.schemas.luckperms import LuckPermsPlayerCreateRequest
from hubgw.core.errors import AlreadyExistsError, NotFoundError
from hubgw.services.luckperms_service import LuckPermsService
from hubgw.services.users_service import UserService
class WhitelistService:
@ -17,7 +20,21 @@ class WhitelistService:
def __init__(self, session: AsyncSession):
self.repo = WhitelistRepository(session)
async def add_player(self, request: WhitelistAddRequest) -> SchemaWhitelistEntry:
async def add_player(
self,
request: WhitelistAddRequest,
luckperms_service: LuckPermsService,
user_service: UserService
) -> SchemaWhitelistEntry:
try:
luckperms_create_request = LuckPermsPlayerCreateRequest(
username=request.player_name,
primary_group="default"
)
await luckperms_service.create_player(luckperms_create_request, user_service)
except AlreadyExistsError:
pass
existing = await self.repo.get_by_player_name(request.player_name)
if existing:
if existing.is_active: