Skip to content

Commit 4577cab

Browse files
committed
[swxs]
feature: 附件管理基础模型
1 parent 9eb7acc commit 4577cab

12 files changed

+293
-1
lines changed

apps/upload/__init__.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# -*- coding: utf-8 -*-
2+
# @FILE : __init__.py
3+
# @AUTH : model_creater

apps/upload/api/__init__.py

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# -*- coding: utf-8 -*-
2+
# @FILE : __init__.py
3+
# @AUTH : model_creater
4+
5+
# import router
6+
# router.include_router(prefix="/{name}", router=router)
7+
8+
from fastapi import APIRouter
9+
10+
router = APIRouter(prefix="/upload", tags=["upload"])

apps/upload/api/file_info.py

+120
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
# -*- coding: utf-8 -*-
2+
# @File : api/file_info.py
3+
# @AUTH : code_creater
4+
5+
import logging
6+
7+
from bson import ObjectId
8+
from fastapi import APIRouter, Body, Path, Query
9+
from fastapi.param_functions import Depends
10+
11+
from web.custom_types import OID
12+
from web.dependencies.pagination import PageSchema, PaginationSchema, get_pagination
13+
from web.dependencies.token import TokenSchema, get_token
14+
from web.response import success
15+
16+
# 本模块方法
17+
from ..dao.file_info import FileInfo
18+
from ..schemas.file_info import FileInfoSchema, get_file_info_schema
19+
20+
router = APIRouter()
21+
22+
logger = logging.getLogger("main.apps.upload.api.file_info")
23+
24+
25+
@router.get("/")
26+
async def get_file_info_list(
27+
token_schema: TokenSchema = Depends(get_token),
28+
file_info_schema: FileInfoSchema = Depends(get_file_info_schema),
29+
page_schema: PageSchema = Depends(get_pagination),
30+
):
31+
file_info_list = (
32+
await FileInfo.search(
33+
searches=file_info_schema.dict(exclude_unset=True),
34+
skip=page_schema.skip,
35+
limit=page_schema.limit,
36+
)
37+
).order_by(page_schema.order_by)
38+
39+
pagination = PaginationSchema(
40+
total=await FileInfo.count(
41+
finds=file_info_schema.dict(exclude_unset=True),
42+
),
43+
order_by=page_schema.order_by,
44+
use_pager=page_schema.use_pager,
45+
page=page_schema.page,
46+
page_number=page_schema.page_number,
47+
)
48+
49+
return success(
50+
{
51+
"data": await file_info_list.to_dict(),
52+
"pagination": pagination.dict(),
53+
}
54+
)
55+
56+
57+
@router.get("/{file_info_id}")
58+
async def get_file_info(
59+
token_schema: TokenSchema = Depends(get_token),
60+
file_info_id: OID = Path(..., regex="[0-9a-f]{24}"),
61+
):
62+
file_info = await FileInfo.find_one(
63+
finds={"id": ObjectId(file_info_id)},
64+
)
65+
66+
return success(
67+
{
68+
"data": file_info,
69+
}
70+
)
71+
72+
73+
@router.post("/")
74+
async def create_file_info(
75+
token_schema: TokenSchema = Depends(get_token),
76+
file_info_schema: FileInfoSchema = Body(...),
77+
):
78+
file_info = await FileInfo.create(
79+
params=file_info_schema.dict(exclude_defaults=True),
80+
)
81+
82+
return success(
83+
{
84+
"data": file_info,
85+
}
86+
)
87+
88+
89+
@router.put("/{file_info_id}")
90+
async def modify_file_info(
91+
token_schema: TokenSchema = Depends(get_token),
92+
file_info_id: OID = Path(..., regex="[0-9a-f]{24}"),
93+
file_info_schema: FileInfoSchema = Body(...),
94+
):
95+
file_info = await FileInfo.update_one(
96+
finds={"id": ObjectId(file_info_id)},
97+
params=file_info_schema.dict(exclude_defaults=True),
98+
)
99+
100+
return success(
101+
{
102+
"data": file_info,
103+
}
104+
)
105+
106+
107+
@router.delete("/{file_info_id}")
108+
async def delete_file_info(
109+
token_schema: TokenSchema = Depends(get_token),
110+
file_info_id: OID = Path(..., regex="[0-9a-f]{24}"),
111+
):
112+
count = await FileInfo.delete_one(
113+
finds={"id": ObjectId(file_info_id)},
114+
)
115+
116+
return success(
117+
{
118+
"count": count,
119+
}
120+
)

apps/upload/consts.py

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# -*- coding: utf-8 -*-
2+
# @FILE : consts.py
3+
# @AUTH : model_creater
4+
5+
6+
from enum import Enum
7+
8+
FILE_INFO_POLICY_ALIOSS = 1
9+
10+
FILE_INFO_POLICY_LIST = [
11+
(FILE_INFO_POLICY_ALIOSS, '阿里OSS'),
12+
]

apps/upload/dao/__init__.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# -*- coding: utf-8 -*-
2+
# @FILE : __init__.py
3+
# @AUTH : model_creater

apps/upload/dao/file_info.py

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# -*- coding: utf-8 -*-
2+
# @File : dao/file_info.py
3+
# @AUTH : code_creater
4+
5+
import logging
6+
import datetime
7+
8+
from dao import BaseDocument, fields
9+
10+
# 本模块方法
11+
from .. import consts
12+
from ..models.file_info import FileInfo as FileInfoModel
13+
14+
logger = logging.getLogger("main.apps.upload.dao.file_info")
15+
16+
17+
class FileInfo(BaseDocument):
18+
id = fields.PrimaryField()
19+
created = fields.DateTimeField(
20+
default_create=datetime.datetime.now,
21+
)
22+
updated = fields.DateTimeField(
23+
default_create=datetime.datetime.now,
24+
default_update=datetime.datetime.now,
25+
)
26+
file_id = fields.StringField()
27+
file_name = fields.StringField()
28+
file_size = fields.IntField(
29+
default_create=0,
30+
)
31+
ext = fields.StringField()
32+
policy = fields.IntField(
33+
enums=consts.FILE_INFO_POLICY_LIST,
34+
)
35+
36+
class Meta:
37+
model = FileInfoModel
38+
manager = "umongo_motor"
39+
memorizer = "none"
40+
41+
def __init__(self, **kwargs):
42+
super(FileInfo, self).__init__(**kwargs)

apps/upload/file_info_utils.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# -*- coding: utf-8 -*-
2+
# @FILE : utils/file_info.py
3+
# @AUTH : model_creater

apps/upload/models/__init__.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# -*- coding: utf-8 -*-
2+
# @FILE : __init__.py
3+
# @AUTH : model_creater

apps/upload/models/file_info.py

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# -*- coding: utf-8 -*-
2+
# @FILE : models/file_info.py
3+
# @AUTH : code_creater
4+
5+
from umongo import Document, fields
6+
7+
import core
8+
9+
10+
@core.mongodb_instance.register
11+
class FileInfo(Document):
12+
created = fields.DateTimeField(
13+
required=True,
14+
allow_none=False,
15+
)
16+
updated = fields.DateTimeField(
17+
required=True,
18+
allow_none=False,
19+
)
20+
file_id = fields.StringField(
21+
required=True,
22+
allow_none=False,
23+
)
24+
file_name = fields.StringField(
25+
required=True,
26+
allow_none=False,
27+
)
28+
file_size = fields.IntField(
29+
required=False,
30+
allow_none=False,
31+
)
32+
ext = fields.StringField(
33+
required=False,
34+
allow_none=True,
35+
)
36+
policy = fields.IntField(
37+
required=True,
38+
allow_none=False,
39+
)
40+
41+
class Meta:
42+
indexes = [
43+
{
44+
'key': ['file_id'],
45+
'unique': True,
46+
},
47+
]
48+
pass

apps/upload/schemas/__init__.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# -*- coding: utf-8 -*-
2+
# @FILE : __init__.py
3+
# @AUTH : model_creater

apps/upload/schemas/file_info.py

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# -*- coding: utf-8 -*-
2+
# @FILE : schemas/file_info.py
3+
# @AUTH : model_creater
4+
5+
import datetime
6+
from typing import Dict, List, Optional
7+
8+
import pydantic
9+
from bson import ObjectId
10+
from fastapi import Query
11+
12+
from web.custom_types import OID
13+
14+
15+
class FileInfoSchema(pydantic.BaseModel):
16+
class Config:
17+
arbitrary_types_allowed = True
18+
19+
file_id: Optional[str] = None
20+
file_name: Optional[str] = None
21+
file_size: Optional[int] = None
22+
ext: Optional[str] = None
23+
policy: Optional[int] = None
24+
25+
26+
async def get_file_info_schema(
27+
file_id: Optional[str] = Query(None),
28+
file_name: Optional[str] = Query(None),
29+
file_size: Optional[str] = Query(None),
30+
ext: Optional[str] = Query(None),
31+
policy: Optional[str] = Query(None),
32+
):
33+
params = {}
34+
if file_id is not None:
35+
params["file_id"] = file_id
36+
if file_name is not None:
37+
params["file_name"] = file_name
38+
if file_size is not None:
39+
params["file_size"] = file_size
40+
if ext is not None:
41+
params["ext"] = ext
42+
if policy is not None:
43+
params["policy"] = policy
44+
45+
return FileInfoSchema(**params)

code_creater

0 commit comments

Comments
 (0)