-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathviews.py
99 lines (85 loc) · 3.3 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
from http import HTTPStatus
from typing import Optional
from fastapi import APIRouter, Depends, HTTPException, Request
from fastapi.responses import HTMLResponse
from lnbits.core.models import User
from lnbits.decorators import check_user_exists, optional_user_id
from lnbits.helpers import template_renderer
from .crud import (
get_auction_room,
get_auction_room_by_id,
)
from .models import PublicAuctionItem, PublicAuctionRoom
from .services import get_auction_item
auction_house_generic_router: APIRouter = APIRouter()
def auction_house_renderer():
return template_renderer(["auction_house/templates"])
@auction_house_generic_router.get("/", response_class=HTMLResponse)
async def index(request: Request, user: User = Depends(check_user_exists)):
return auction_house_renderer().TemplateResponse(
"auction_house/index.html", {"request": request, "user": user.json()}
)
@auction_house_generic_router.get(
"/auction_room/{auction_room_id}", response_class=HTMLResponse
)
async def auction_room_details(
request: Request, auction_room_id: str, user: User = Depends(check_user_exists)
):
auction_room = await get_auction_room(
user_id=user.id, auction_room_id=auction_room_id
)
if not auction_room:
raise HTTPException(HTTPStatus.NOT_FOUND, "Auction Room does not exist.")
return auction_house_renderer().TemplateResponse(
"auction_house/auction_room.html",
{
"request": request,
"auction_room": auction_room.json(),
"user": user.json(),
},
)
@auction_house_generic_router.get(
"/auctions/{auction_room_id}", response_class=HTMLResponse
)
async def auctions_list(
request: Request,
auction_room_id: str,
user_id: Optional[str] = Depends(optional_user_id),
):
auction_room = await get_auction_room_by_id(auction_room_id)
if not auction_room:
raise HTTPException(HTTPStatus.NOT_FOUND, "Auction Room does not exist.")
public_auction_room = PublicAuctionRoom(**auction_room.dict()).json()
return auction_house_renderer().TemplateResponse(
"auction_house/auctions.html",
{
"request": request,
"is_user_authenticated": user_id is not None,
"is_user_room_owner": user_id == auction_room.user_id,
"auction_room": public_auction_room,
},
)
@auction_house_generic_router.get(
"/bids/{auction_item_id}", response_class=HTMLResponse
)
async def bids_list(
request: Request,
auction_item_id: str,
user_id: Optional[str] = Depends(optional_user_id),
):
auction_item = await get_auction_item(auction_item_id)
if not auction_item:
raise HTTPException(HTTPStatus.NOT_FOUND, "Auction Item does not exist.")
auction_room = await get_auction_room_by_id(auction_item.auction_room_id)
if not auction_room:
raise HTTPException(HTTPStatus.NOT_FOUND, "Auction Room not found.")
return auction_house_renderer().TemplateResponse(
"auction_house/bids.html",
{
"request": request,
"is_user_authenticated": user_id is not None,
"is_user_room_owner": user_id == auction_room.user_id,
"is_auction_type": auction_room.type == "auction",
"auction_item": PublicAuctionItem(**auction_item.dict()).json(),
},
)