110 lines
3.2 KiB
Python
110 lines
3.2 KiB
Python
|
|
# 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/<device_id> — 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/<device_id> — 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/<device_id> — 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/<device_id>/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))
|