from flask import jsonify, request from flask_login import current_user from flask_restful import Resource # type: ignore from werkzeug.exceptions import NotFound from controllers.console import api from controllers.console.wraps import ( account_initialization_required, setup_required, ) from libs.login import login_required from services.dept_service import DeptService class DeptAccountListApi(Resource): @setup_required @login_required @account_initialization_required def get(self): edit = request.args.get("edit", default=1, type=str) if edit is None or edit == "": type = 0 dept_account_list = DeptService.get_dept_account_list(type) else: type = 1 dept_account_list = DeptService.get_dept_account_list(type) response = { "result": "success", "data": dept_account_list, } return response, 200 @setup_required @login_required @account_initialization_required def post(self): data = request.get_json() if not data: raise NotFound("Invalid JSON") dept_account_list = data.get("account_ids") dept_id = data.get("dept_id") DeptService.save_dept_account_list(dept_id, dept_account_list) response = { "result": "success", } return response, 200 @setup_required @login_required @account_initialization_required def delete(self): data = request.get_json() if not data: raise NotFound("Invalid JSON") dept_account_list = data.get("account_ids") dept_id = data.get("dept_id") DeptService.delete_dept_account_list(dept_id, dept_account_list) response = { "result": "success", } return response, 200 class DeptAccountApi(Resource): @setup_required @login_required @account_initialization_required def get(self, dept_id): dept_account = DeptService.get_dept_account(dept_id) response = { "result": "success", "data": dept_account, } return response, 200 class DeptListApi(Resource): @setup_required @login_required @account_initialization_required def get(self): dept_list = DeptService.get_dept_list() response = { "result": "success", "data": dept_list, } return response, 200 @setup_required @login_required @account_initialization_required def post(self): data = request.get_json() if not data: return jsonify({"error": "Invalid JSON"}), 400 if not data: raise NotFound("Invalid JSON") dept_name = data.get("dept_name") dept_id = data.get("dept_id") parent_dept_id = data.get("parent_dept_id") dept_by_name = DeptService.get_dept_by_name(dept_name) if dept_id not in {None, ""}: dept_by_id = DeptService.get_dept_by_id(dept_id) if dept_by_id != None: if dept_by_id.dept_name != dept_name or dept_by_id.parent_dept_id != parent_dept_id: # 修改 if dept_by_name != None: if dept_by_name.dept_id == dept_by_id.dept_id and dept_by_id.parent_dept_id != parent_dept_id: DeptService.update_dept(dept_id, dept_name, current_user, parent_dept_id) else: DeptService.update_dept(dept_id, dept_name, current_user, parent_dept_id) else: raise NotFound("Dept not found.") else: if dept_by_name != None: raise ValueError("dept_name cannot repeat.") else: DeptService.save_dept(dept_name, current_user, parent_dept_id) return {"result": "success"}, 204 class DeptApi(Resource): @setup_required @login_required @account_initialization_required def get(self, dept_id): dept_id = str(dept_id) dept = DeptService.get_dept_by_id(dept_id) response = { "result": "success", "data": dept, } return response, 200 @setup_required @login_required @account_initialization_required def delete(self, dept_id): dept_id = str(dept_id) dept = DeptService.get_dept_by_id(dept_id) if dept is None: raise NotFound("Dept not found.") DeptService.delete_dept(dept) return {"result": "success"}, 204 api.add_resource(DeptAccountListApi, "/dept/dept-accounts") api.add_resource(DeptAccountApi, "/dept/dept-accounts/") api.add_resource(DeptListApi, "/depts") api.add_resource(DeptApi, "/depts/")