from enum import Enum from typing import Optional from pydantic import BaseModel from fastapi import FastAPI, Query, UploadFile, File import dataset,json from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware app = FastAPI() origins = [ "http://172.105.205.52", "http://172.105.205.52:8000", ] app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/cmm_test?charset=utf8mb4') ##########TAG CRUD################TAG CRUD##################TAG CRUD###########TAG CRUD################## class Tag(BaseModel): id: int name: str @app.get("/tags") async def get_tags(): course_table = db['course_table'] print(course_table.columns) statement = 'SELECT id,name FROM tag_table' tags = [] for row in db.query(statement): tags.append({'id':row['id'],'name':row['name']}) return tags @app.post("/tags") async def create_tags(tag:Tag): tag_table = db['tag_table'] pk = tag_table.insert({'name':tag.name}) tag.id = pk return tag @app.delete("/tags/{tag_id}") async def delete_tags(tag_id:int): sqls = 'DELETE FROM tag_table WHERE id = '+str(tag_id) db.query(sqls) sqls = 'DELETE FROM course_tag WHERE tag_id = '+str(tag_id) db.query(sqls) return result @app.put("/tags/{tag_id}") async def update_tags(tag_id,tag:Tag): sqls = 'UPDATE tag_table\ SET name="'+tag.name+'"\ WHERE id='+tag_id+';' db.query(sqls) tag.id=tag_id return tag @app.get("/tags/{tag_id}") async def get_tags(tag_id): statement = 'SELECT id,name FROM tag_table where id = '+tag_id for row in db.query(statement): result = {'id':row['id'],'name':row['name']} return result ###########COURSE CRUD###########COURSE CRUD###########COURSE CRUD###########COURSE CRUD########### class Course(BaseModel): id: int name: str cover_src: str #image src url content_des: str #course description watch_times: int price: int period: int #times a week @app.get("/courses") async def get_courses(tag_string): courses = [] statement = 'SELECT course_id from course_tag where tag_id IN'+tag_string course_id_string = '(' for row in db.query(statement): course_id_string = course_id_string + str(row['course_id'])+"," course_id_string=course_id_string[:-1] course_id_string = course_id_string+')' statement = 'SELECT id,name from course_table where id IN'+course_id_string for row in db.query(statement): courses.append({'id':row['id'],'name':row['name']}) return courses @app.post("/courses") async def create_courses(Tag_IDs: list,course:Course): course_table = db['course_table'] course_tag_table = db['course_tag'] pkey = course_table.insert({'name':course.name,'content_des':course.content_des, 'price':course.price,'period':course.period}) sqls = 'INSERT INTO course_tag (course_id, tag_id)VALUES' for tid in Tag_IDs: sqls = sqls + '('+str(pkey)+','+str(tid)+'),' sqls = sqls[:-1] db.query(sqls) return course @app.post("/course_cover_change/{course_id}") async def course_cover_change(course_id, uploaded_file: UploadFile = File(...)): file_location = f"course_cover_img/{course_id}" with open(file_location, "wb+") as file_object: file_object.write(uploaded_file.file.read()) sqls = 'UPDATE course_table\ SET cover_img="'+file_location+'"\ WHERE id='+course_id+';' db.query(sqls) return '{"file_loc":'+file_location+'}'