# pyrefly: ignore [missing-import] from flask import request from common.response.api_response import success_response from common.constants.status_code import HTTP_CREATED from modules.device.service import ( get_devices_service, get_device_by_id_service, create_device_service, update_device_service, delete_device_service ) from modules.device.schemas import CreateDeviceSchema, UpdateDeviceSchema def get_devices(): """GET /api/devices — Lấy danh sách tất cả các thiết bị mạng""" devices = get_devices_service() return success_response( data=devices, message="Devices retrieved successfully" ) def get_device_by_id(device_id): """GET /api/devices/ — Lấy chi tiết thiết bị theo ID""" device = get_device_by_id_service(device_id) return success_response( data=device, message="Device retrieved successfully" ) def create_device(): """ POST /api/devices — Thêm mới một thiết bị mạng """ body = request.get_json() # Validate bằng schema schema = CreateDeviceSchema() data = schema.load(body) # Gọi service xử lý logic nghiệp vụ new_device = create_device_service(data) return success_response( data=new_device, message="Device created successfully", status_code=HTTP_CREATED ) def update_device(device_id): """ PUT /api/devices/ — Cập nhật thông tin thiết bị mạng """ body = request.get_json() # Validate bằng schema schema = UpdateDeviceSchema() data = schema.load(body) # Gọi service để kiểm tra và cập nhật DB updated_device = update_device_service(device_id, data) return success_response( data=updated_device, message="Device updated successfully" ) def delete_device(device_id): """ DELETE /api/devices/ — Xóa thiết bị mạng khỏi hệ thống """ delete_device_service(device_id) return success_response( message="Device deleted successfully" ) # def upload_device_avatar_controller(device_id): # """ # POST /api/devices//avatar — Upload ảnh đại diện thiết bị lên S3/MinIO # và cập nhật URL vào database. # """ # # 1. Kiểm tra tồn tại của thiết bị # device = get_device_by_id_service(device_id) # # 2. Lấy file ảnh từ request.files # file = request.files.get("file") # if not file: # raise BadRequestException("Missing image file in request") # try: # # 3. Thực hiện upload lên S3/MinIO # avatar_url = upload_device_avatar(file, device["name"]) # # 4. Cập nhật trường avatar_url của thiết bị trong DB # updated_device = update_device_service(device_id, {"avatar_url": avatar_url}) # return success_response( # data=updated_device, # message="Device avatar uploaded successfully", # status_code=HTTP_CREATED # ) # except ValueError as e: # # ValidationError trong quá trình validate loại file # raise BadRequestException(str(e))