| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- from sqlalchemy.orm import Session
- from sqlalchemy.exc import SQLAlchemyError, IntegrityError
- import models, schemas
- from utils import hash_password, encrypt_data, decrypt_data
- def create_user(db: Session, user: schemas.UserCreate):
- """Создает нового пользователя в базе данных на основе предоставленных данных."""
- try:
- hashed_password = hash_password(user.password)
- encrypted_email = encrypt_data(user.email)
- db_user = models.User(name=user.name, email=encrypted_email, password=hashed_password)
- db.add(db_user)
- db.commit()
- db.refresh(db_user)
- db_user.email = decrypt_data(db_user.email)
- return db_user
- except IntegrityError:
- db.rollback()
- raise ValueError("User with this email already exists")
- except SQLAlchemyError:
- db.rollback()
- raise ConnectionError("Database error while creating user")
- def get_users(db: Session):
- """Получает список всех пользователей из базы данных."""
- try:
- users = db.query(models.User).all()
- for user in users:
- user.email = decrypt_data(user.email)
- return users
- except SQLAlchemyError:
- raise ConnectionError("Database error while fetching users")
- def get_user(db: Session, user_id: int):
- """Получает информацию о пользователе по его ID из базы данных."""
- try:
- user = db.query(models.User).filter(models.User.id == user_id).first()
- if not user:
- raise LookupError("User not found")
- user.email = decrypt_data(user.email)
- return user
- except SQLAlchemyError:
- raise ConnectionError("Database error while fetching user")
- def delete_user(db: Session, user_id: int):
- """Удаляет пользователя по его ID из базы данных."""
- try:
- user = db.query(models.User).filter(models.User.id == user_id).first()
- if not user:
- raise LookupError("User not found")
- db.delete(user)
- db.commit()
- return user
- except SQLAlchemyError:
- db.rollback()
- raise ConnectionError("Database error while deleting user")
- def update_user(db: Session, user_id: int, user_update: schemas.UserCreate):
- """Обновляет данные пользователя по его ID."""
- try:
- user = db.query(models.User).filter(models.User.id == user_id).first()
- if not user:
- raise LookupError("User not found")
- user.name = user_update.name
- user.email = encrypt_data(user_update.email)
- user.password = hash_password(user_update.password)
- db.commit()
- db.refresh(user)
- user.email = decrypt_data(user.email)
- return user
- except SQLAlchemyError:
- db.rollback()
- raise ConnectionError("Database error while updating user")
- def create_post(db: Session, post: schemas.PostCreate):
- """Создает новый пост в базе данных, проверяя существование пользователя."""
- try:
- user = db.query(models.User).filter(models.User.id == post.user_id).first()
- if not user:
- raise LookupError("User does not exist")
- db_post = models.Post(**post.dict())
- db.add(db_post)
- db.commit()
- db.refresh(db_post)
- return db_post
- except IntegrityError:
- db.rollback()
- raise ValueError("Invalid post data")
- except SQLAlchemyError:
- db.rollback()
- raise ConnectionError("Database error while creating post")
- def get_posts(db: Session):
- """Получает список всех постов из базы данных."""
- try:
- return db.query(models.Post).all()
- except SQLAlchemyError:
- raise ConnectionError("Database error while fetching posts")
- def get_post(db: Session, post_id: int):
- """Получает информацию о посте по его ID из базы данных."""
- try:
- post = db.query(models.Post).filter(models.Post.id == post_id).first()
- if not post:
- raise LookupError("Post not found")
- return post
- except SQLAlchemyError:
- raise ConnectionError("Database error while fetching post")
- def update_post(db: Session, post_id: int, post_update: schemas.PostCreate):
- """Обновляет данные поста по его ID."""
- try:
- post = db.query(models.Post).filter(models.Post.id == post_id).first()
- if not post:
- raise LookupError("Post not found")
- for key, value in post_update.dict().items():
- setattr(post, key, value)
- db.commit()
- db.refresh(post)
- return post
- except SQLAlchemyError:
- db.rollback()
- raise ConnectionError("Database error while updating post")
|