Files
Claude Agent df4031d99c feat: Space Booking System - MVP complet
Sistem web pentru rezervarea de birouri și săli de ședință
cu flux de aprobare administrativă.

Stack: FastAPI + Vue.js 3 + SQLite + TypeScript

Features implementate:
- Autentificare JWT + Self-registration cu email verification
- CRUD Spații, Utilizatori, Settings (Admin)
- Calendar interactiv (FullCalendar) cu drag-and-drop
- Creare rezervări cu validare (durată, program, overlap, max/zi)
- Rezervări recurente (săptămânal)
- Admin: aprobare/respingere/anulare cereri
- Admin: creare directă rezervări (bypass approval)
- Admin: editare orice rezervare
- User: editare/anulare rezervări proprii
- Notificări in-app (bell icon + dropdown)
- Notificări email (async SMTP cu BackgroundTasks)
- Jurnal acțiuni administrative (audit log)
- Rapoarte avansate (utilizare, top users, approval rate)
- Șabloane rezervări (booking templates)
- Atașamente fișiere (upload/download)
- Conflict warnings (verificare disponibilitate real-time)
- Integrare Google Calendar (OAuth2)
- Suport timezone (UTC storage + user preference)
- 225+ teste backend

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 17:51:29 +00:00

63 lines
1.1 KiB
Python

"""User schemas for request/response."""
from pydantic import BaseModel, EmailStr
class UserBase(BaseModel):
"""Base user schema."""
email: EmailStr
full_name: str
organization: str | None = None
class UserCreate(UserBase):
"""User creation schema."""
password: str
role: str = "user"
class UserResponse(UserBase):
"""User response schema."""
id: int
role: str
is_active: bool
timezone: str = "UTC"
model_config = {"from_attributes": True}
class Token(BaseModel):
"""Token response schema."""
access_token: str
token_type: str
class UserUpdate(BaseModel):
"""User update schema."""
email: EmailStr | None = None
full_name: str | None = None
role: str | None = None
organization: str | None = None
class UserStatusUpdate(BaseModel):
"""User status update schema."""
is_active: bool
class ResetPasswordRequest(BaseModel):
"""Reset password request schema."""
new_password: str
class TokenData(BaseModel):
"""Token data schema."""
user_id: int | None = None