feat: add project acceptance collection service
This commit is contained in:
55
app.py
55
app.py
@@ -13,6 +13,15 @@ from auth_service import (
|
||||
)
|
||||
from config import Config
|
||||
from database import init_database
|
||||
from acceptance_service import (
|
||||
create_acceptance_task,
|
||||
get_acceptance_resources,
|
||||
get_acceptance_task,
|
||||
list_acceptance_notes,
|
||||
list_acceptance_tasks,
|
||||
resume_acceptance_task,
|
||||
resume_unfinished_acceptance_tasks,
|
||||
)
|
||||
from rule_service import (
|
||||
delete_rule_document,
|
||||
get_rule_document,
|
||||
@@ -37,6 +46,18 @@ def create_app() -> Flask:
|
||||
app = Flask(__name__)
|
||||
init_database()
|
||||
|
||||
def local_dev_user():
|
||||
if not Config.LOCAL_AUTH_BYPASS or request.remote_addr not in {"127.0.0.1", "::1"}:
|
||||
return None
|
||||
return {
|
||||
"id": "local-dev",
|
||||
"name": "本地开发用户",
|
||||
"account": "local-dev",
|
||||
"avatar": "",
|
||||
"union_id": "",
|
||||
"open_id": "",
|
||||
}
|
||||
|
||||
@app.before_request
|
||||
def assign_request_id():
|
||||
g.request_id = request.headers.get("X-Request-Id") or f"req_{secrets.token_hex(10)}"
|
||||
@@ -45,7 +66,7 @@ def create_app() -> Flask:
|
||||
open_paths = ("/health", "/api/v1/auth/", "/api/v1/skill/")
|
||||
if request.path == "/health" or any(request.path.startswith(path) for path in open_paths):
|
||||
return None
|
||||
user = get_user_by_session_token(request.cookies.get(Config.SESSION_COOKIE_NAME))
|
||||
user = local_dev_user() or get_user_by_session_token(request.cookies.get(Config.SESSION_COOKIE_NAME))
|
||||
if user is None and request.path.startswith("/api/"):
|
||||
return jsonify({
|
||||
"error": {"code": "UNAUTHORIZED", "message": "请先通过钉钉授权登录"},
|
||||
@@ -190,7 +211,7 @@ def create_app() -> Flask:
|
||||
|
||||
@app.route("/api/v1/auth/me", methods=["GET"])
|
||||
def auth_me():
|
||||
user = get_user_by_session_token(request.cookies.get(Config.SESSION_COOKIE_NAME))
|
||||
user = local_dev_user() or get_user_by_session_token(request.cookies.get(Config.SESSION_COOKIE_NAME))
|
||||
if not user:
|
||||
raise TaskError("UNAUTHORIZED", "请先通过钉钉授权登录", 401)
|
||||
return jsonify({"data": {"user": user}, "request_id": g.request_id})
|
||||
@@ -212,6 +233,35 @@ def create_app() -> Flask:
|
||||
task = create_task(payload)
|
||||
return jsonify({"data": task, "request_id": g.request_id}), 201
|
||||
|
||||
@app.route("/api/v1/acceptance-tasks", methods=["POST"])
|
||||
def create_project_acceptance_task():
|
||||
payload = request.get_json(silent=True) or {}
|
||||
current_user = getattr(g, "current_user", None) or {}
|
||||
payload["created_by_id"] = current_user.get("id") or payload.get("created_by_id")
|
||||
payload["created_by_name"] = current_user.get("name") or payload.get("created_by_name")
|
||||
task = create_acceptance_task(payload)
|
||||
return jsonify({"data": task, "request_id": g.request_id}), 201
|
||||
|
||||
@app.route("/api/v1/acceptance-resources", methods=["GET"])
|
||||
def query_project_acceptance_resources():
|
||||
return jsonify({"data": get_acceptance_resources(), "request_id": g.request_id})
|
||||
|
||||
@app.route("/api/v1/acceptance-tasks", methods=["GET"])
|
||||
def query_project_acceptance_tasks():
|
||||
return jsonify({"data": list_acceptance_tasks(), "request_id": g.request_id})
|
||||
|
||||
@app.route("/api/v1/acceptance-tasks/<task_id>", methods=["GET"])
|
||||
def get_project_acceptance_task(task_id: str):
|
||||
return jsonify({"data": get_acceptance_task(task_id), "request_id": g.request_id})
|
||||
|
||||
@app.route("/api/v1/acceptance-tasks/<task_id>/notes", methods=["GET"])
|
||||
def get_project_acceptance_notes(task_id: str):
|
||||
return jsonify({"data": list_acceptance_notes(task_id), "request_id": g.request_id})
|
||||
|
||||
@app.route("/api/v1/acceptance-tasks/<task_id>/resume", methods=["POST"])
|
||||
def resume_project_acceptance_task(task_id: str):
|
||||
return jsonify({"data": resume_acceptance_task(task_id), "request_id": g.request_id})
|
||||
|
||||
@app.route("/api/v1/tasks", methods=["GET"])
|
||||
def query_research_tasks():
|
||||
result = list_tasks(
|
||||
@@ -286,6 +336,7 @@ def create_app() -> Flask:
|
||||
return jsonify({"data": delete_rule_document(), "request_id": g.request_id})
|
||||
|
||||
resume_unfinished_tasks()
|
||||
resume_unfinished_acceptance_tasks()
|
||||
return app
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user