feat: the people resource belong a user
This commit is contained in:
@@ -12,6 +12,7 @@ from utils.error import ErrorCode, error
|
|||||||
class PeopleRLDBModel(RLDBBaseModel):
|
class PeopleRLDBModel(RLDBBaseModel):
|
||||||
__tablename__ = 'peoples'
|
__tablename__ = 'peoples'
|
||||||
id = Column(String(36), primary_key=True)
|
id = Column(String(36), primary_key=True)
|
||||||
|
user_id = Column(String(36), index=True)
|
||||||
name = Column(String(255), index=True)
|
name = Column(String(255), index=True)
|
||||||
contact = Column(String(255), index=True)
|
contact = Column(String(255), index=True)
|
||||||
gender = Column(String(10))
|
gender = Column(String(10))
|
||||||
@@ -61,6 +62,8 @@ class Comment:
|
|||||||
class People:
|
class People:
|
||||||
# 数据库 ID
|
# 数据库 ID
|
||||||
id: str
|
id: str
|
||||||
|
# 所属用户 ID
|
||||||
|
user_id: str
|
||||||
# 姓名
|
# 姓名
|
||||||
name: str
|
name: str
|
||||||
# 联系人
|
# 联系人
|
||||||
@@ -87,6 +90,7 @@ class People:
|
|||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
# 初始化所有属性,从kwargs中获取值,如果不存在则设置默认值
|
# 初始化所有属性,从kwargs中获取值,如果不存在则设置默认值
|
||||||
self.id = kwargs.get('id', '') if kwargs.get('id', '') is not None else ''
|
self.id = kwargs.get('id', '') if kwargs.get('id', '') is not None else ''
|
||||||
|
self.user_id = kwargs.get('user_id', '') if kwargs.get('user_id', '') is not None else ''
|
||||||
self.name = kwargs.get('name', '') if kwargs.get('name', '') is not None else ''
|
self.name = kwargs.get('name', '') if kwargs.get('name', '') is not None else ''
|
||||||
self.contact = kwargs.get('contact', '') if kwargs.get('contact', '') is not None else ''
|
self.contact = kwargs.get('contact', '') if kwargs.get('contact', '') is not None else ''
|
||||||
self.gender = kwargs.get('gender', '') if kwargs.get('gender', '') is not None else ''
|
self.gender = kwargs.get('gender', '') if kwargs.get('gender', '') is not None else ''
|
||||||
@@ -121,6 +125,7 @@ class People:
|
|||||||
# 将关系数据库模型转换为对象
|
# 将关系数据库模型转换为对象
|
||||||
return cls(
|
return cls(
|
||||||
id=data.id,
|
id=data.id,
|
||||||
|
user_id=data.user_id,
|
||||||
name=data.name,
|
name=data.name,
|
||||||
contact=data.contact,
|
contact=data.contact,
|
||||||
gender=data.gender,
|
gender=data.gender,
|
||||||
@@ -138,6 +143,7 @@ class People:
|
|||||||
# 将对象转换为字典格式
|
# 将对象转换为字典格式
|
||||||
return {
|
return {
|
||||||
'id': self.id,
|
'id': self.id,
|
||||||
|
'user_id': self.user_id,
|
||||||
'name': self.name,
|
'name': self.name,
|
||||||
'contact': self.contact,
|
'contact': self.contact,
|
||||||
'gender': self.gender,
|
'gender': self.gender,
|
||||||
@@ -155,6 +161,7 @@ class People:
|
|||||||
# 将对象转换为关系数据库模型
|
# 将对象转换为关系数据库模型
|
||||||
return PeopleRLDBModel(
|
return PeopleRLDBModel(
|
||||||
id=self.id,
|
id=self.id,
|
||||||
|
user_id=self.user_id,
|
||||||
name=self.name,
|
name=self.name,
|
||||||
contact=self.contact,
|
contact=self.contact,
|
||||||
gender=self.gender,
|
gender=self.gender,
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
|
from re import S
|
||||||
from typing import Protocol
|
from typing import Protocol
|
||||||
import uuid
|
import uuid
|
||||||
from sqlalchemy import Column, DateTime, String, create_engine, func
|
from sqlalchemy import Column, DateTime, String, create_engine, func
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ from models.people import People
|
|||||||
from agents.extract_people_agent import ExtractPeopleAgent
|
from agents.extract_people_agent import ExtractPeopleAgent
|
||||||
from utils import obs, ocr
|
from utils import obs, ocr
|
||||||
from utils.config import get_instance as get_config
|
from utils.config import get_instance as get_config
|
||||||
|
from utils.error import ErrorCode
|
||||||
|
|
||||||
api = FastAPI(title="Single People Management and Searching", version="0.1")
|
api = FastAPI(title="Single People Management and Searching", version="0.1")
|
||||||
api.add_middleware(
|
api.add_middleware(
|
||||||
@@ -84,18 +85,19 @@ def extract_people(text: str, cover_link: str = None) -> People:
|
|||||||
class PostPeopleRequest(BaseModel):
|
class PostPeopleRequest(BaseModel):
|
||||||
people: dict
|
people: dict
|
||||||
|
|
||||||
@api.post("/api/people")
|
@authorized_router.post("/api/people")
|
||||||
async def post_people(post_people_request: PostPeopleRequest):
|
async def post_people(request: Request, post_people_request: PostPeopleRequest):
|
||||||
logging.debug(f"post_people_request: {post_people_request}")
|
logging.debug(f"post_people_request: {post_people_request}")
|
||||||
people = People.from_dict(post_people_request.people)
|
people = People.from_dict(post_people_request.people)
|
||||||
|
people.user_id = getattr(request.state, 'user_id', '')
|
||||||
service = get_people_service()
|
service = get_people_service()
|
||||||
people.id, error = service.save(people)
|
people.id, error = service.save(people)
|
||||||
if not error.success:
|
if not error.success:
|
||||||
return BaseResponse(error_code=error.code, error_info=error.info)
|
return BaseResponse(error_code=error.code, error_info=error.info)
|
||||||
return BaseResponse(error_code=0, error_info="success", data=people.id)
|
return BaseResponse(error_code=0, error_info="success", data=people.id)
|
||||||
|
|
||||||
@api.put("/api/people/{people_id}")
|
@authorized_router.put("/api/people/{people_id}")
|
||||||
async def update_people(people_id: str, post_people_request: PostPeopleRequest):
|
async def update_people(request: Request, people_id: str, post_people_request: PostPeopleRequest):
|
||||||
logging.debug(f"post_people_request: {post_people_request}")
|
logging.debug(f"post_people_request: {post_people_request}")
|
||||||
people = People.from_dict(post_people_request.people)
|
people = People.from_dict(post_people_request.people)
|
||||||
people.id = people_id
|
people.id = people_id
|
||||||
@@ -103,14 +105,22 @@ async def update_people(people_id: str, post_people_request: PostPeopleRequest):
|
|||||||
res, error = service.get(people_id)
|
res, error = service.get(people_id)
|
||||||
if not error.success or not res:
|
if not error.success or not res:
|
||||||
return BaseResponse(error_code=error.code, error_info=error.info)
|
return BaseResponse(error_code=error.code, error_info=error.info)
|
||||||
|
if res.user_id != getattr(request.state, 'user_id', ''):
|
||||||
|
return BaseResponse(error_code=ErrorCode.MODEL_ERROR.value, error_info="permission denied")
|
||||||
|
people.user_id = res.user_id
|
||||||
_, error = service.save(people)
|
_, error = service.save(people)
|
||||||
if not error.success:
|
if not error.success:
|
||||||
return BaseResponse(error_code=error.code, error_info=error.info)
|
return BaseResponse(error_code=error.code, error_info=error.info)
|
||||||
return BaseResponse(error_code=0, error_info="success")
|
return BaseResponse(error_code=0, error_info="success")
|
||||||
|
|
||||||
@api.delete("/api/people/{people_id}")
|
@authorized_router.delete("/api/people/{people_id}")
|
||||||
async def delete_people(people_id: str):
|
async def delete_people(request: Request, people_id: str):
|
||||||
service = get_people_service()
|
service = get_people_service()
|
||||||
|
res, err = service.get(people_id)
|
||||||
|
if not err.success or not res:
|
||||||
|
return BaseResponse(error_code=err.code, error_info=err.info)
|
||||||
|
if res.user_id != getattr(request.state, 'user_id', ''):
|
||||||
|
return BaseResponse(error_code=ErrorCode.MODEL_ERROR.value, error_info="permission denied")
|
||||||
error = service.delete(people_id)
|
error = service.delete(people_id)
|
||||||
if not error.success:
|
if not error.success:
|
||||||
return BaseResponse(error_code=error.code, error_info=error.info)
|
return BaseResponse(error_code=error.code, error_info=error.info)
|
||||||
@@ -121,8 +131,9 @@ class GetPeopleRequest(BaseModel):
|
|||||||
conds: Optional[dict] = None
|
conds: Optional[dict] = None
|
||||||
top_k: int = 5
|
top_k: int = 5
|
||||||
|
|
||||||
@api.get("/api/peoples")
|
@authorized_router.get("/api/peoples")
|
||||||
async def get_peoples(
|
async def get_peoples(
|
||||||
|
request: Request,
|
||||||
name: Optional[str] = Query(None, description="姓名"),
|
name: Optional[str] = Query(None, description="姓名"),
|
||||||
gender: Optional[str] = Query(None, description="性别"),
|
gender: Optional[str] = Query(None, description="性别"),
|
||||||
age: Optional[int] = Query(None, description="年龄"),
|
age: Optional[int] = Query(None, description="年龄"),
|
||||||
@@ -134,6 +145,7 @@ async def get_peoples(
|
|||||||
|
|
||||||
# 解析查询参数为字典
|
# 解析查询参数为字典
|
||||||
conds = {}
|
conds = {}
|
||||||
|
conds["user_id"] = getattr(request.state, 'user_id', '')
|
||||||
if name:
|
if name:
|
||||||
conds["name"] = name
|
conds["name"] = name
|
||||||
if gender:
|
if gender:
|
||||||
@@ -161,18 +173,28 @@ class RemarkRequest(BaseModel):
|
|||||||
content: str
|
content: str
|
||||||
|
|
||||||
|
|
||||||
@api.post("/api/people/{people_id}/remark")
|
@authorized_router.post("/api/people/{people_id}/remark")
|
||||||
async def post_remark(people_id: str, request: RemarkRequest):
|
async def post_remark(request: Request, people_id: str, body: RemarkRequest):
|
||||||
service = get_people_service()
|
service = get_people_service()
|
||||||
error = service.save_remark(people_id, request.content)
|
res, err = service.get(people_id)
|
||||||
|
if not err.success or not res:
|
||||||
|
return BaseResponse(error_code=err.code, error_info=err.info)
|
||||||
|
if res.user_id != getattr(request.state, 'user_id', ''):
|
||||||
|
return BaseResponse(error_code=ErrorCode.MODEL_ERROR.value, error_info="permission denied")
|
||||||
|
error = service.save_remark(people_id, body.content)
|
||||||
if not error.success:
|
if not error.success:
|
||||||
return BaseResponse(error_code=error.code, error_info=error.info)
|
return BaseResponse(error_code=error.code, error_info=error.info)
|
||||||
return BaseResponse(error_code=0, error_info="success")
|
return BaseResponse(error_code=0, error_info="success")
|
||||||
|
|
||||||
|
|
||||||
@api.delete("/api/people/{people_id}/remark")
|
@authorized_router.delete("/api/people/{people_id}/remark")
|
||||||
async def delete_remark(people_id: str):
|
async def delete_remark(request: Request, people_id: str):
|
||||||
service = get_people_service()
|
service = get_people_service()
|
||||||
|
res, err = service.get(people_id)
|
||||||
|
if not err.success or not res:
|
||||||
|
return BaseResponse(error_code=err.code, error_info=err.info)
|
||||||
|
if res.user_id != getattr(request.state, 'user_id', ''):
|
||||||
|
return BaseResponse(error_code=ErrorCode.MODEL_ERROR.value, error_info="permission denied")
|
||||||
error = service.delete_remark(people_id)
|
error = service.delete_remark(people_id)
|
||||||
if not error.success:
|
if not error.success:
|
||||||
return BaseResponse(error_code=error.code, error_info=error.info)
|
return BaseResponse(error_code=error.code, error_info=error.info)
|
||||||
|
|||||||
Reference in New Issue
Block a user