main.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from enum import Enum
  2. from typing import Optional
  3. from pydantic import BaseModel
  4. from fastapi import FastAPI, Query, UploadFile, File
  5. import dataset,json
  6. from fastapi import FastAPI
  7. from fastapi.middleware.cors import CORSMiddleware
  8. app = FastAPI()
  9. origins = [
  10. "http://172.105.205.52",
  11. "http://172.105.205.52:8000",
  12. ]
  13. app.add_middleware(
  14. CORSMiddleware,
  15. allow_origins=origins,
  16. allow_credentials=True,
  17. allow_methods=["*"],
  18. allow_headers=["*"],
  19. )
  20. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/cmm_test?charset=utf8mb4')
  21. ##########TAG CRUD################TAG CRUD##################TAG CRUD###########TAG CRUD##################
  22. class Tag(BaseModel):
  23. id: int
  24. name: str
  25. @app.get("/tags")
  26. async def get_tags():
  27. course_table = db['course_table']
  28. print(course_table.columns)
  29. statement = 'SELECT id,name FROM tag_table'
  30. tags = []
  31. for row in db.query(statement):
  32. tags.append({'id':row['id'],'name':row['name']})
  33. return tags
  34. @app.post("/tags")
  35. async def create_tags(tag:Tag):
  36. tag_table = db['tag_table']
  37. pk = tag_table.insert({'name':tag.name})
  38. tag.id = pk
  39. return tag
  40. @app.delete("/tags/{tag_id}")
  41. async def delete_tags(tag_id:int):
  42. sqls = 'DELETE FROM tag_table WHERE id = '+str(tag_id)
  43. db.query(sqls)
  44. sqls = 'DELETE FROM course_tag WHERE tag_id = '+str(tag_id)
  45. db.query(sqls)
  46. return result
  47. @app.put("/tags/{tag_id}")
  48. async def update_tags(tag_id,tag:Tag):
  49. sqls = 'UPDATE tag_table\
  50. SET name="'+tag.name+'"\
  51. WHERE id='+tag_id+';'
  52. db.query(sqls)
  53. tag.id=tag_id
  54. return tag
  55. @app.get("/tags/{tag_id}")
  56. async def get_tags(tag_id):
  57. statement = 'SELECT id,name FROM tag_table where id = '+tag_id
  58. for row in db.query(statement):
  59. result = {'id':row['id'],'name':row['name']}
  60. return result
  61. ###########COURSE CRUD###########COURSE CRUD###########COURSE CRUD###########COURSE CRUD###########
  62. class Course(BaseModel):
  63. id: int
  64. name: str
  65. cover_src: str #image src url
  66. content_des: str #course description
  67. watch_times: int
  68. price: int
  69. period: int #times a week
  70. @app.get("/courses")
  71. async def get_courses(tag_string):
  72. courses = []
  73. statement = 'SELECT course_id from course_tag where tag_id IN'+tag_string
  74. course_id_string = '('
  75. for row in db.query(statement):
  76. course_id_string = course_id_string + str(row['course_id'])+","
  77. course_id_string=course_id_string[:-1]
  78. course_id_string = course_id_string+')'
  79. statement = 'SELECT id,name from course_table where id IN'+course_id_string
  80. for row in db.query(statement):
  81. courses.append({'id':row['id'],'name':row['name']})
  82. return courses
  83. @app.post("/courses")
  84. async def create_courses(Tag_IDs: list,course:Course):
  85. course_table = db['course_table']
  86. course_tag_table = db['course_tag']
  87. pkey = course_table.insert({'name':course.name,'content_des':course.content_des,
  88. 'price':course.price,'period':course.period})
  89. sqls = 'INSERT INTO course_tag (course_id, tag_id)VALUES'
  90. for tid in Tag_IDs:
  91. sqls = sqls + '('+str(pkey)+','+str(tid)+'),'
  92. sqls = sqls[:-1]
  93. db.query(sqls)
  94. return course
  95. @app.post("/course_cover_change/{course_id}")
  96. async def course_cover_change(course_id, uploaded_file: UploadFile = File(...)):
  97. file_location = f"course_cover_img/{course_id}"
  98. with open(file_location, "wb+") as file_object:
  99. file_object.write(uploaded_file.file.read())
  100. sqls = 'UPDATE course_table\
  101. SET cover_img="'+file_location+'"\
  102. WHERE id='+course_id+';'
  103. db.query(sqls)
  104. return '{"file_loc":'+file_location+'}'