Merge remote-tracking branch 'origin/master'

# Conflicts:
#	services/backend/api/v1/auth.py
#	services/backend/api/v1/router.py
#	services/backend/api/v1/user/schemas.py
#	services/backend/api/v1/user/views.py
#	services/backend/apps/user/apps.py
#	services/backend/config/settings.py
This commit is contained in:
Андрей Сумин
2025-03-01 01:17:13 +03:00
31 changed files with 116 additions and 15462 deletions
+35 -18
View File
@@ -1,12 +1,12 @@
from ninja import Router
from http import HTTPStatus as status
from ninja import Router
from ninja.errors import AuthenticationError
from api.v1.user.schemas import LoginSchema, RegisterSchema, TokenSchema, UserSchema
from api.v1.auth import BearerAuth
from api.v1.schemas import BadRequestError, ForbiddenError, NotFoundError
from api.v1.user.schemas import (
LoginSchema,
RegisterSchema,
TokenSchema,
UserSchema,
)
from apps.user.models import User
router = Router(tags=["user"])
@@ -14,30 +14,47 @@ router = Router(tags=["user"])
@router.post(
path="/sign-up",
response={
201: TokenSchema,
400: BadRequestError,
status.CREATED: TokenSchema,
status.BAD_REQUEST: BadRequestError,
},
auth=None,
)
def sign_up(data: RegisterSchema): ...
def sign_up(request, data: RegisterSchema):
user = User(**data.dict())
user.full_clean()
user.save()
token = BearerAuth.generate_jwt(user)
return status.CREATED, TokenSchema(token=token)
@router.post(
path="/sign-in",
response={
200: TokenSchema,
400: BadRequestError,
403: ForbiddenError,
status.OK: TokenSchema,
status.BAD_REQUEST: BadRequestError,
status.UNAUTHORIZED: ForbiddenError,
},
auth=None,
)
def sign_in(data: LoginSchema): ...
def sign_in(request, data: LoginSchema):
user = User.objects.filter(email=data.email).first()
if not user:
raise AuthenticationError
if user.password != data.password:
raise AuthenticationError
token = BearerAuth.generate_jwt(user)
return status.OK, TokenSchema(token=token)
@router.get(
path="/user/{user_id}",
response={
200: UserSchema,
400: BadRequestError,
404: NotFoundError,
status.OK: UserSchema,
status.BAD_REQUEST: BadRequestError,
status.NOT_FOUND: NotFoundError,
},
)
def get_user(user_id: str): ...
def get_user(request, user_id: str):
...
-4
View File
@@ -7,7 +7,3 @@ from django.core.cache import cache
class CoreConfig(AppConfig):
name = "apps.core"
label = "core"
def ready(self) -> None:
with contextlib.suppress(Exception):
cache.add("current_date", 0, timeout=None)
+7
View File
@@ -3,11 +3,18 @@ from django.db import models
from apps.core.models import BaseModel
class UserRole(models.Choices):
STUDENT = "student"
METODIST = "metodist"
class User(BaseModel):
email = models.EmailField(unique=True, verbose_name="Почта")
username = models.SlugField(unique=True, verbose_name="Юзернейм")
password = models.TextField(verbose_name="Пароль")
status = models.CharField(max_length=10, choices=UserRole.choices, default=UserRole.STUDENT)
def __str__(self):
return self.username
+17
View File
@@ -0,0 +1,17 @@
# Stage 1: Build the Vite app using Bun
FROM oven/bun:latest AS builder
WORKDIR /app
COPY package.json bun.lock ./
RUN bun install --frozen-lockfile
COPY . .
RUN npm run build
# Stage 2: Serve the built files with Nginx
FROM nginx:latest
COPY --from=builder /app/dist /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
+2 -2
View File
@@ -5,8 +5,8 @@
"type": "module",
"scripts": {
"dev": "vite --host",
"build": "tsc -b && vite build",
"lint": "eslint .",
"build": "vite build",
"lint": "eslint . && tsc -b",
"preview": "vite preview"
},
"dependencies": {