Coverage for model/profile.py: 100%
39 statements
« prev ^ index » next coverage.py v7.9.2, created at 2026-07-24 16:42 +0000
« prev ^ index » next coverage.py v7.9.2, created at 2026-07-24 16:42 +0000
1from fastapi import APIRouter, Depends
2from typing import Optional
4from mongo import *
5from .auth import login_required
6from .utils import *
7from .schemas import EditProfileBody, EditConfigBody
9__all__ = ['profile_router']
11profile_router = APIRouter()
14@profile_router.get('')
15@profile_router.get('/{username}')
16def view_profile(user=Depends(login_required), username: Optional[str] = None):
17 user = user if username is None else User(username)
18 if not user:
19 return HTTPError('Profile not exist.', 404)
21 data = {
22 'email': user.obj.email,
23 'displayedName': user.obj.profile.displayed_name,
24 'bio': user.obj.profile.bio,
25 }
26 data.update(user.info)
28 return HTTPResponse('Profile exist.', data=data)
31@profile_router.post('')
32def edit_profile(body: EditProfileBody, user=Depends(login_required)):
33 profile = user.obj.profile or {}
34 displayed_name = body.displayed_name
35 bio = body.bio
37 if displayed_name is not None:
38 profile[
39 'displayed_name'] = displayed_name if displayed_name != "" else user.username
40 if bio is not None:
41 profile['bio'] = bio
43 user.obj.update(profile=profile)
45 cookies = {'jwt': user.cookie}
46 return HTTPResponse('Uploaded.', cookies=cookies)
49@profile_router.put('/config')
50def edit_config(body: EditConfigBody, user=Depends(login_required)):
51 try:
52 config = {
53 'font_size': body.font_size,
54 'theme': body.theme,
55 'indent_type': body.indent_type,
56 'tab_size': body.tab_size,
57 'language': body.language,
58 }
59 user.obj.update(editor_config=config)
60 except ValidationError as ve:
61 return HTTPError('Update fail.', 400, data=ve.to_dict())
62 user.reload()
63 cookies = {'jwt': user.cookie}
64 return HTTPResponse('Uploaded.', cookies=cookies)