backend: initial
This commit is contained in:
parent
e5932844e2
commit
b62f6d87c7
33 changed files with 59 additions and 15 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,2 +1,5 @@
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
__pycache__/
|
||||||
.idea/
|
.idea/
|
||||||
.DS_Store
|
.DS_Store
|
32
backend/main.py
Normal file
32
backend/main.py
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
from fastapi import FastAPI
|
||||||
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
|
|
||||||
|
from vntypes import Novel
|
||||||
|
|
||||||
|
app = FastAPI()
|
||||||
|
|
||||||
|
origins = [
|
||||||
|
"http://localhost",
|
||||||
|
"http://localhost:5173",
|
||||||
|
]
|
||||||
|
|
||||||
|
app.add_middleware(
|
||||||
|
CORSMiddleware,
|
||||||
|
allow_origins=origins,
|
||||||
|
allow_credentials=True,
|
||||||
|
allow_methods=["*"],
|
||||||
|
allow_headers=["*"],
|
||||||
|
)
|
||||||
|
|
||||||
|
@app.get("/")
|
||||||
|
def read_root():
|
||||||
|
return {"Hello": "World"}
|
||||||
|
|
||||||
|
@app.get("/posts/{uuid}")
|
||||||
|
def get_post(uuid: str):
|
||||||
|
return uuid
|
||||||
|
|
||||||
|
@app.post("/new")
|
||||||
|
def new_post(novel: Novel):
|
||||||
|
print(novel)
|
||||||
|
return "yay!"
|
|
@ -1,17 +1,20 @@
|
||||||
|
|
||||||
|
from pydantic import BaseModel
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
class Novel:
|
class Novel(BaseModel):
|
||||||
title: str
|
title: str
|
||||||
description: str
|
description: str
|
||||||
|
|
||||||
vndb: int
|
vndb: int | None = None
|
||||||
hours_to_read: int
|
hours_to_read: int
|
||||||
|
|
||||||
tags: list[str]
|
tags: list[str]
|
||||||
genres: list[str]
|
genres: list[str]
|
||||||
|
badges: list[str]
|
||||||
|
|
||||||
tg_post: str #url::Url
|
tg_post: str | None = None #url::Url
|
||||||
post_at: datetime
|
post_at: datetime | None = None
|
||||||
|
|
||||||
class FullNovel:
|
class FullNovel:
|
||||||
data: Novel
|
data: Novel
|
0
vnshed/.gitignore → frontend/.gitignore
vendored
0
vnshed/.gitignore → frontend/.gitignore
vendored
0
vnshed/src/app.d.ts → frontend/src/app.d.ts
vendored
0
vnshed/src/app.d.ts → frontend/src/app.d.ts
vendored
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 119 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
@ -11,15 +11,21 @@
|
||||||
let page_data = $state({
|
let page_data = $state({
|
||||||
title: "",
|
title: "",
|
||||||
description: "",
|
description: "",
|
||||||
time_to_read: "",
|
hours_to_read: 0,
|
||||||
genres: [],
|
genres: [],
|
||||||
tags: [],
|
tags: [],
|
||||||
badges: [],
|
badges: []
|
||||||
pub_date: ""
|
|
||||||
})
|
})
|
||||||
|
|
||||||
function send_json() {
|
function send_json() {
|
||||||
console.log(JSON.stringify(page_data))
|
fetch('http://127.0.0.1:8000/new', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Access-Control-Allow-Origin': "<origin>"
|
||||||
|
},
|
||||||
|
body: JSON.stringify(page_data)
|
||||||
|
});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -43,11 +49,11 @@
|
||||||
<!-- Время на чтение -->
|
<!-- Время на чтение -->
|
||||||
<div class="horisontal-bar">
|
<div class="horisontal-bar">
|
||||||
<p>Время на чтение</p>
|
<p>Время на чтение</p>
|
||||||
<select class="input rounded" id="hours-count" bind:value={page_data["time_to_read"]}>
|
<select class="input rounded" id="hours-count" bind:value={page_data["hours_to_read"]}>
|
||||||
<option value="first">менее 2-х часов</option>
|
<option value="2">менее 2-х часов</option>
|
||||||
<option value="second">2-10 часов</option>
|
<option value="10">2-10 часов</option>
|
||||||
<option value="third">10-30 часов</option>
|
<option value="30">10-30 часов</option>
|
||||||
<option value="third">50+ часов</option>
|
<option value="50">50+ часов</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"title": "Higurashi no Naku Koro ni. Console-exclusive Arcs (Когда плачут цикады. Эксклюзивные главы)",
|
"title": "Higurashi no Naku Koro ni. Console-exclusive Arcs (Когда плачут цикады. Эксклюзивные главы)",
|
||||||
"description": "Эксклюзивные главы для консольных версий \"Higurashi no Naku Koro ni\". Главы рекомендуется читать после ознакомления с оригинальными главами.\n\nUPD: На данный момент переведены: Taraimawashi, Tsukiotoshi, Hajisarashi, Miotsukushi и Материалы полиции\n\nОписание глав:\n\nTaraimawashi - Альтернативная первая глава, на первый взгляд — это дополнение к арке \"Вопросов\", пересказ Onikakushi-hen. Тем не менее, эта глава на самом деле содержит события Watanagashi-hen.\nУзнав секреты Хинамидзавы, Кейти решает игнорировать всё и наслаждаться мирной школьной жизнью.\nTsukiotoshi - Оригинальная консольная глава, которая является развилкой для третьей главы \"Tatarigoroshi\".\nДядя Сатоко приезжает в Хинамидзаву, и Кейти решает найти союзников, чтобы помочь Сатоко. Возможно, \"худший\" из миров, где на кубиках выпали одни \"единицы.\"\nHajisarashi - одним жарким днём Рика и её друзья идут в бассейн.\nMiotsukushi - альтернативная концовка всей оригинальной серии.\nМатериалы полиции - краткие истории по длине равных TIPS, которые немного раскрывают Оиши и Акасаку..[/i]",
|
"description": "Эксклюзивные главы для консольных версий \"Higurashi no Naku Koro ni\". Главы рекомендуется читать после ознакомления с оригинальными главами.\n\nUPD: На данный момент переведены: Taraimawashi, Tsukiotoshi, Hajisarashi, Miotsukushi и Материалы полиции\n\nОписание глав:\n\nTaraimawashi - Альтернативная первая глава, на первый взгляд — это дополнение к арке \"Вопросов\", пересказ Onikakushi-hen. Тем не менее, эта глава на самом деле содержит события Watanagashi-hen.\nУзнав секреты Хинамидзавы, Кейти решает игнорировать всё и наслаждаться мирной школьной жизнью.\nTsukiotoshi - Оригинальная консольная глава, которая является развилкой для третьей главы \"Tatarigoroshi\".\nДядя Сатоко приезжает в Хинамидзаву, и Кейти решает найти союзников, чтобы помочь Сатоко. Возможно, \"худший\" из миров, где на кубиках выпали одни \"единицы.\"\nHajisarashi - одним жарким днём Рика и её друзья идут в бассейн.\nMiotsukushi - альтернативная концовка всей оригинальной серии.\nМатериалы полиции - краткие истории по длине равных TIPS, которые немного раскрывают Оиши и Акасаку..[/i]",
|
||||||
"time_to_read": 4,
|
"hours_to_read": 50,
|
||||||
"genres": [ "Драма", "Хоррор", "Детектив", "Мистика", "Повседневность" ],
|
"genres": [ "Драма", "Хоррор", "Детектив", "Мистика", "Повседневность" ],
|
||||||
"tags": [ "Иностранный разработчик", "Несколько главных героев" ],
|
"tags": [ "Иностранный разработчик", "Несколько главных героев" ],
|
||||||
"badges": [ "Лучшее" ],
|
"badges": [ "Лучшее" ],
|
||||||
"pub_date": "2024-04-13T08:30:00Z"
|
"post_at": "2024-04-13T08:30:00Z"
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue