Compare commits

..

57 Commits
1.0.3 ... 1.4.0

Author SHA1 Message Date
ed1334f00a Merge pull request 'feature/tags-collection' (#36) from feature/tags-collection into master
Reviewed-on: #36
2024-12-21 23:06:40 +01:00
2a194c163a add tag in put endpiint 2024-12-21 23:05:24 +01:00
a893e86cdf add tags rouger work 2024-12-21 22:38:21 +01:00
ca983f1199 add routers tags 2024-12-21 21:38:14 +01:00
1afcd626ea add models tags 2024-12-21 20:59:43 +01:00
0f8a5b32b0 Merge pull request 'add fix tags' (#35) from hotfix/fix-tags into master
Reviewed-on: #35
2024-12-21 20:49:14 +01:00
c2c7b034b6 add fix tags 2024-12-21 20:47:33 +01:00
f880b1e6a4 Merge pull request 'fix list' (#34) from feature/tags-search into master
Reviewed-on: #34
2024-12-18 23:53:28 +01:00
32f571103d fix list 2024-12-18 23:52:42 +01:00
94d6db0866 Merge pull request 'fix list' (#33) from feature/tags-search into master
Reviewed-on: #33
2024-12-18 23:48:18 +01:00
be17ec9202 fix list 2024-12-18 23:47:40 +01:00
9cf1c64ef9 Merge pull request 'feature/tags-search' (#32) from feature/tags-search into master
Reviewed-on: #32
2024-12-18 22:11:35 +01:00
1d7ec61982 add in 2024-12-16 23:53:46 +01:00
3189b08b09 refactor code 2024-12-16 23:51:26 +01:00
81be2a08d1 Merge pull request 'add options i' (#31) from feature/options-case into master
Reviewed-on: #31
2024-11-28 23:19:15 +01:00
7f34e835e3 add options i 2024-11-28 23:17:19 +01:00
721d7a3a5d Merge pull request 'fix end_date' (#30) from feature/searchByDate into master
Reviewed-on: #30
2024-11-23 21:06:36 +01:00
f08bdd5f0a fix end_date 2024-11-23 21:03:44 +01:00
beff787801 Merge pull request 'add selected date' (#29) from feature/searchByDate into master
Reviewed-on: #29
2024-11-23 20:18:57 +01:00
c8bc3cc68a add selected date 2024-11-23 20:13:03 +01:00
f290ea9bd0 Merge pull request 'add parameter date event' (#28) from feature/searchByDate into master
Reviewed-on: #28
2024-11-23 16:25:26 +01:00
ea05db0d91 add parameter date event 2024-11-23 16:12:40 +01:00
36ae3504b8 Merge pull request 'add current_time in list all events' (#27) from feature/listEventDate into master
Reviewed-on: #27
2024-11-10 18:45:39 +01:00
b4e37a71d0 add current_time in list all events 2024-11-10 18:42:13 +01:00
53dc28a8e9 Merge pull request 'feature/listEventDate' (#26) from feature/listEventDate into master
Reviewed-on: #26
2024-11-09 18:20:25 +01:00
49a22bc567 add current_datetime in events 2024-11-09 16:19:52 +01:00
4a484bfb42 add current_time in search 2024-11-09 16:04:47 +01:00
f8805aa60b Merge pull request 'rollback city' (#25) from feature/search into master
Reviewed-on: #25
2024-11-07 18:05:03 +01:00
ef19ef00d5 rollback city 2024-11-07 17:54:12 +01:00
9574ce5aeb Merge pull request 'feature/search' (#24) from feature/search into master
Reviewed-on: #24
2024-11-04 23:06:10 +01:00
115a5acb6f add another object_search 2024-11-04 22:58:51 +01:00
4c2d4646ce add lat and long as parameter 2024-11-04 22:57:53 +01:00
4f0cda831f Merge pull request 'add event set status to 1' (#23) from feature/search into master
Reviewed-on: #23
2024-10-23 23:37:50 +02:00
360ac8771a add event set status to 1 2024-10-23 23:36:09 +02:00
df4a2bead6 Merge pull request 'fix object_search' (#22) from feature/search into master
Reviewed-on: #22
2024-10-23 23:22:59 +02:00
a1e135a03e fix object_search 2024-10-23 23:22:05 +02:00
8397d84ec5 Merge pull request 'fix endpoint search' (#21) from feature/search into master
Reviewed-on: #21
2024-10-23 23:08:46 +02:00
9108e15555 fix endpoint search 2024-10-23 23:07:28 +02:00
fcb11dd0d8 Merge pull request 'list events only enabled' (#20) from feature/search into master
Reviewed-on: #20
2024-10-23 23:02:24 +02:00
3f4173863c list events only enabled 2024-10-23 22:58:17 +02:00
6781789012 Merge pull request 'add search' (#19) from feature/search into master
Reviewed-on: #19
2024-10-23 22:04:08 +02:00
436e6d68dd add search 2024-10-23 21:44:33 +02:00
2bbb3a0a95 Merge pull request 'add search' (#18) from feature/category into master
Reviewed-on: #18
2024-10-21 20:18:01 +02:00
d91e561561 add search 2024-10-20 20:56:24 +02:00
84d8f7fd12 Merge pull request 'add tags for event models' (#17) from feature/category into master
Reviewed-on: #17
2024-10-14 18:05:16 +02:00
0df6291428 add tags for event models 2024-10-14 18:03:51 +02:00
8209dd5be7 Merge pull request 'add img path' (#16) from feature/add-imgUrl into master
Reviewed-on: #16
2024-09-17 22:36:15 +02:00
8362602bde add img path 2024-09-15 23:54:47 +02:00
5733677bee Merge pull request 'add description' (#15) from feature/add-description into master
Reviewed-on: #15
2024-09-03 15:45:14 +02:00
0a33551fa7 add description 2024-09-03 15:41:37 +02:00
a39e4596c6 Merge pull request 'fix put error' (#14) from feature/more-detail-place into master
Reviewed-on: #14
2024-09-03 11:25:09 +02:00
f63de8e306 fix put error 2024-09-03 11:20:57 +02:00
af7df69731 Merge pull request 'feature/more-detail-place' (#13) from feature/more-detail-place into master
Reviewed-on: #13
2024-09-02 23:55:30 +02:00
080abdd9fe remove useless file 2024-09-02 23:54:35 +02:00
fbe187b5ff fix error 2024-09-02 23:54:19 +02:00
3477ed90a5 Merge pull request 'fix build error' (#12) from feature/more-detail-place into master
Reviewed-on: #12
2024-09-02 23:08:48 +02:00
0a7b862222 fix build error 2024-09-02 22:56:08 +02:00
5 changed files with 380 additions and 28 deletions

View File

@@ -1,7 +1,7 @@
from fastapi import FastAPI from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from .routers import users, token, mail, events from .routers import users, token, mail, events, tags
from .dependencies import user_add from .dependencies import user_add
import os import os
@@ -29,6 +29,7 @@ app.include_router(users.router)
app.include_router(token.router) app.include_router(token.router)
app.include_router(mail.router) app.include_router(mail.router)
app.include_router(events.router) app.include_router(events.router)
app.include_router(tags.router)
@app.on_event("startup") @app.on_event("startup")

View File

@@ -6,10 +6,13 @@ class Event(BaseModel):
id: ObjectIdField = None id: ObjectIdField = None
name: str name: str
place: str place: str
description: str
imgUrl: str | None = None
status: int = 0 status: int = 0
latitude: float = 0.0 latitude: float = 0.0
longitude: float = 0.0 longitude: float = 0.0
organizers: list[str] = [] organizers: list[str] = []
tags: list[str] = []
start_date: datetime | None = None start_date: datetime | None = None
end_date: datetime | None = None end_date: datetime | None = None
created_at: datetime = datetime.today() created_at: datetime = datetime.today()
@@ -21,15 +24,21 @@ class EventOut(BaseModel):
id: ObjectIdField = None id: ObjectIdField = None
name: str name: str
place: str place: str
description: str
imgUrl: str | None = None
status: int = 0 status: int = 0
start_date: datetime | None = None start_date: datetime | None = None
end_date: datetime | None = None end_date: datetime | None = None
tags: list[str] = []
class EventIn(BaseModel): class EventIn(BaseModel):
name: str name: str
place: str place: str
description: str
imgUrl: str | None = None
status: int = 0 status: int = 0
organizers: list[str] = [] organizers: list[str] = []
tags: list[str] = []
start_date: datetime | None = None start_date: datetime | None = None
end_date: datetime | None = None end_date: datetime | None = None
latitude: float = 0.0 latitude: float = 0.0

24
app/models/tags.py Normal file
View File

@@ -0,0 +1,24 @@
from pydantic import BaseModel, EmailStr
from pydantic_mongo import AbstractRepository, ObjectIdField
from datetime import datetime, date
class Tags(BaseModel):
id: ObjectIdField = None
name: str
created_at: datetime = datetime.today()
class TagsOut(BaseModel):
id: ObjectIdField = None
name: str
class TagsIn(BaseModel):
name: str
class TagsIDS(BaseModel):
ids: list[str]
class TagsRepository(AbstractRepository[Tags]):
class Meta:
collection_name = "tags"

View File

@@ -2,42 +2,221 @@ from fastapi import APIRouter, Depends, HTTPException, status, Response
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
from datetime import datetime from datetime import datetime
from ..dependencies import users_token, permissions_checker, database from ..dependencies import users_token, permissions_checker, database
from ..models import events, users from ..models import events, users, tags
from pydantic import EmailStr from pydantic import EmailStr
from typing import Annotated from typing import Annotated, Union
from bson import ObjectId from bson import ObjectId
from datetime import datetime
router = APIRouter() router = APIRouter()
def build_location_filter(min_lat, max_lat, min_lon, max_lon):
"""Build location-based query filters."""
if min_lat is not None and max_lat is not None and min_lon is not None and max_lon is not None:
return [
{"latitude": {"$gte": min_lat}},
{"latitude": {"$lte": max_lat}},
{"longitude": {"$gte": min_lon}},
{"longitude": {"$lte": max_lon}},
]
return []
def build_datetime_filter(current_datetime):
"""Build filters for current datetime."""
if current_datetime:
return {
"$or": [
{"start_date": {"$gte": current_datetime}}, # Upcoming events
{
"$and": [
{"start_date": {"$lte": current_datetime}}, # Already started
{"$or": [
{"end_date": {"$gte": current_datetime}}, # Ongoing
{"end_date": None}, # No end date
]},
],
},
],
}
return None
def build_date_filter(start_date, end_date):
"""Build date range filters."""
if start_date and end_date:
return [
{"start_date": {"$gte": datetime.combine(start_date, datetime.min.time())}},
{"start_date": {"$lte": datetime.combine(end_date, datetime.max.time())}},
]
return []
def build_text_filter(item):
"""Build text-based search filters."""
if item:
return {
"$or": [
{"name": {"$regex": item, "$options": "i"}},
{"tags": {"$regex": item, "$options": "i"}},
{"organizers": {"$regex": item, "$options": "i"}},
]
}
return None
@router.get("/events", tags=["events"], response_model=list[events.EventOut]) @router.get("/events", tags=["events"], response_model=list[events.EventOut])
async def read_events(authorize: Annotated[bool, Depends(permissions_checker.PermissionChecker(roles=["Admin", "User"]))], skip: int = 0, limit: int = 20, id_event: str | None = None, name: str | None = None, status: int | None = None): async def read_events(
authorize: Annotated[bool, Depends(permissions_checker.PermissionChecker(roles=["Admin", "User"]))],
skip: int = 0,
limit: int = 20,
id_event: str | None = None,
name: str | None = None,
status: int = 1,
tags: str | None = None,
organizers: str | None = None,
current_datetime: datetime | None = None,
date_event: datetime | None = None,
start_date: datetime | None = None,
end_date: datetime | None = None,
):
# Validate `skip` and `limit`
if limit < 1 or skip < 0 or limit < skip: if limit < 1 or skip < 0 or limit < skip:
raise HTTPException( raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST, status_code=status.HTTP_400_BAD_REQUEST,
detail="skip should be greater than 0 and limit should be greater than 1. Limit should be greater than skip" detail="`skip` should be >= 0 and `limit` should be > 0 and greater than `skip`.",
) )
limit = limit + skip limit = limit + skip
listEvents = []
# Initialize filters
filters = []
# Add status filter
filters.append({"status": {"$eq": status}})
# Add date filters
if date_event:
start_of_day = datetime.combine(date_event, datetime.min.time())
end_of_day = datetime.combine(date_event, datetime.max.time())
filters.extend(build_date_filter(start_of_day, end_of_day))
elif start_date and end_date:
filters.extend(build_date_filter(start_date, end_date))
# Add current datetime filter
datetime_filter = build_datetime_filter(current_datetime)
if datetime_filter:
filters.append(datetime_filter)
# Add text-based filters
if name:
filters.append(build_text_filter(name))
if tags:
filters.append({"tags": {"$eq": tags}})
if organizers:
filters.append({"organizers": {"$eq": organizers}})
# Add ID filter
if id_event:
try:
event_id = ObjectId(id_event)
filters.append({"_id": {"$eq": event_id}})
except Exception:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Invalid event ID format.")
# Combine all filters
object_search = {"$and": filters} if filters else {}
# Fetch and return results
event_repository = events.EventRepository(database=database.database) event_repository = events.EventRepository(database=database.database)
object_search = {} list_events = []
if status is not None:
object_search = {"status":{"$eq": status}}
if id_event is not None:
eventid = ObjectId(id_event)
object_search = {"id": {"$regex": userid}}
if status is not None:
object_search = {"$and":[{"id":{"$regex": eventid}}, {"status":{"$eq":status}}]}
if name is not None:
object_search = {"name": {"$regex": name}}
if status is not None:
object_search = {"$and":[{"name":{"$regex": name}}, {"status":{"$eq":status}}]}
for event_index in event_repository.find_by(object_search, limit=limit, skip=skip): for event_index in event_repository.find_by(object_search, limit=limit, skip=skip):
event = events.EventOut(id=event_index.id, name=event_index.name, place=event_index.place, status=event_index.status, start_date=event_index.start_date, end_date=event_index.end_date) event = events.EventOut(
listEvents.append(event) id=event_index.id,
return listEvents tags=event_index.tags,
imgUrl=event_index.imgUrl,
name=event_index.name,
description=event_index.description,
place=event_index.place,
status=event_index.status,
start_date=event_index.start_date,
end_date=event_index.end_date,
)
list_events.append(event)
return list_events
@router.get("/events/search", tags=["events"], response_model=list[events.EventOut])
async def search_events(
authorize: Annotated[bool, Depends(permissions_checker.PermissionChecker(roles=["Admin", "User"]))],
skip: int = 0,
limit: int = 20,
item: Union[str, None] = None,
status: int = 1,
min_lat: Union[float, None] = None,
max_lat: Union[float, None] = None,
min_lon: Union[float, None] = None,
max_lon: Union[float, None] = None,
current_datetime: Union[datetime, None] = None,
date_event: Union[datetime, None] = None,
start_date: Union[datetime, None] = None,
end_date: Union[datetime, None] = None,
tags: Union[str, None] = None,
):
if limit < 1 or skip < 0 or limit < skip:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="`skip` should be >= 0 and `limit` should be > 0 and greater than `skip`.",
)
limit = limit + skip
# Initialize filters
filters = [{"status": {"$eq": status}}]
# Date filters
if date_event:
start_of_day = datetime.combine(date_event, datetime.min.time())
end_of_day = datetime.combine(date_event, datetime.max.time())
filters.extend(build_date_filter(start_of_day, end_of_day))
else:
filters.extend(build_date_filter(start_date, end_date))
# Add location filter
filters.extend(build_location_filter(min_lat, max_lat, min_lon, max_lon))
# Add datetime filter
datetime_filter = build_datetime_filter(current_datetime)
if datetime_filter:
filters.append(datetime_filter)
# Add text filter
text_filter = build_text_filter(item)
if text_filter:
filters.append(text_filter)
if tags is not None:
filters.append({"tags": {"$eq": tags}})
# Combine filters
object_search = {"$and": filters} if filters else {}
# Fetch and return results
event_repository = events.EventRepository(database=database.database)
list_events = []
for event_index in event_repository.find_by(object_search, limit=limit, skip=skip):
event = events.EventOut(
id=event_index.id,
tags=event_index.tags,
imgUrl=event_index.imgUrl,
name=event_index.name,
description=event_index.description,
place=event_index.place,
status=event_index.status,
start_date=event_index.start_date,
end_date=event_index.end_date,
)
list_events.append(event)
return list_events
@router.get("/events/me",tags=["events"]) @router.get("/events/me",tags=["events"])
@@ -46,7 +225,7 @@ async def read_users_me(current_user: Annotated[users.User, Depends(users_token.
listOrganizers = [] listOrganizers = []
for event_index in event_repository.find_by({"organizers":{"$eq": current_user.username}}, limit=limit, skip=skip): for event_index in event_repository.find_by({"organizers":{"$eq": current_user.username}}, limit=limit, skip=skip):
event = events.EventOut(id=event_index.id, name=event_index.name, place=event_index.place, status=event_index.status, start_date=event_index.start_date, end_date=event_index.end_date) event = events.EventOut(id=event_index.id, name=event_index.name, tags=event_index.tags, imgUrl=event_index.imgUrl, description=event_index.description, place=event_index.place, status=event_index.status, start_date=event_index.start_date, end_date=event_index.end_date)
listOrganizers.append(event) listOrganizers.append(event)
content = {"organizers":listOrganizers} content = {"organizers":listOrganizers}
@@ -128,13 +307,16 @@ async def delete_events_id(item_id : str, authorize: Annotated[bool, Depends(per
async def update_events_me(item_id: str, current_user: Annotated[users.User, Depends(users_token.get_current_active_user)], authorize: Annotated[bool, Depends(permissions_checker.PermissionChecker(roles=["Admin", "User"]))], eventSingle: events.EventIn | None = None): async def update_events_me(item_id: str, current_user: Annotated[users.User, Depends(users_token.get_current_active_user)], authorize: Annotated[bool, Depends(permissions_checker.PermissionChecker(roles=["Admin", "User"]))], eventSingle: events.EventIn | None = None):
event_repository = event.EventRepository(database=database.database) event_repository = event.EventRepository(database=database.database)
event = event_repository.find_one_by_id(ObjectId(item_id)) event = event_repository.find_one_by_id(ObjectId(item_id))
event.name = EventSingle.name event.name = eventSingle.name
event.place = EventSingle.place event.description = eventSingle.description
event.place = eventSingle.place
event.start_date = eventSingle.start_date event.start_date = eventSingle.start_date
event.tags = eventSingle.tags
event.end_date = eventSingle.end_date event.end_date = eventSingle.end_date
event.latitude = eventSingle.latitude event.latitude = eventSingle.latitude
event.longitude = eventSingle.longitude event.longitude = eventSingle.longitude
event.updated_at = datetime.today() event.updated_at = datetime.today()
event.imgUrl = eventSingle.imgUrl
event_repository.save(event) event_repository.save(event)
content = {"message": "event is updated"} content = {"message": "event is updated"}
response = JSONResponse(content=content) response = JSONResponse(content=content)
@@ -148,6 +330,7 @@ async def update_events(authorize: Annotated[bool, Depends(permissions_checker.P
detail="Body request is empty" detail="Body request is empty"
) )
event_repository = events.EventRepository(database=database.database) event_repository = events.EventRepository(database=database.database)
tags_repository = tags.TagsRepository(database=database.database)
event = event_repository.find_one_by({"name": {'$eq': eventSingle.name}}) event = event_repository.find_one_by({"name": {'$eq': eventSingle.name}})
if event is not None: if event is not None:
@@ -157,12 +340,20 @@ async def update_events(authorize: Annotated[bool, Depends(permissions_checker.P
) )
event = events.Event(name=eventSingle.name, place=eventSingle.place) event = events.Event(name=eventSingle.name, description=eventSingle.description, place=eventSingle.place)
event.start_date = eventSingle.start_date event.start_date = eventSingle.start_date
event.end_date = eventSingle.end_date event.end_date = eventSingle.end_date
event.organizers = eventSingle.organizers event.organizers = eventSingle.organizers
event.latitude = eventSingle.latitude event.latitude = eventSingle.latitude
event.longitude = eventSingle.longitude event.longitude = eventSingle.longitude
event.imgUrl = eventSingle.imgUrl
event.tags = eventSingle.tags
for tag_name in eventSingle:
tag = tags_repository.find_one_by({"name": {'$eq': tag_name}})
if tag is None:
tag = Tags(name=tag_name)
tags_repository.save(tag)
event.status = 1
event.created_at = datetime.today() event.created_at = datetime.today()
event_repository.save(event) event_repository.save(event)
content = {"message": "event is created"} content = {"message": "event is created"}
@@ -178,7 +369,7 @@ async def update_events_id(item_id: str, authorize: Annotated[bool, Depends(perm
detail="Body request is empty" detail="Body request is empty"
) )
event_repository = events.EventRepository(database=database.database) event_repository = events.EventRepository(database=database.database)
tags_repository = tags.TagsRepository(database=database)
event = event_repository.find_one_by({"id": {'$eq': ObjectId(item_id)}}) event = event_repository.find_one_by({"id": {'$eq': ObjectId(item_id)}})
if event is None: if event is None:
raise HTTPException( raise HTTPException(
@@ -188,12 +379,20 @@ async def update_events_id(item_id: str, authorize: Annotated[bool, Depends(perm
event.name = eventSingle.name event.name = eventSingle.name
event.place = eventSingle.place event.place = eventSingle.place
event.description = eventSingle.description
event.start_date = eventSingle.start_date event.start_date = eventSingle.start_date
event.end_date = eventSingle.end_date event.end_date = eventSingle.end_date
event.organizers = eventSingle.organizers event.organizers = eventSingle.organizers
event.tags = eventSingle.tags
for tag_name in eventSingle:
tag = tags_repository.find_one_by({"name": {'$eq': tag_name}})
if tag is None:
tag = Tags(name=tag_name)
tags_repository.save(tag)
event.latitude = eventSingle.latitude event.latitude = eventSingle.latitude
event.longitude = eventSingle.longitude event.longitude = eventSingle.longitude
event.updated_at = datetime.today() event.updated_at = datetime.today()
event.imgUrl = eventSingle.imgUrl
event_repository.save(event) event_repository.save(event)
content = {"message": "event is updated"} content = {"message": "event is updated"}
response = JSONResponse(content=content) response = JSONResponse(content=content)

119
app/routers/tags.py Normal file
View File

@@ -0,0 +1,119 @@
from fastapi import APIRouter, Depends, HTTPException, status, Response
from fastapi.responses import JSONResponse
from datetime import datetime
from ..dependencies import users_token, permissions_checker, database
from ..models import tags, users
from pydantic import EmailStr
from typing import Annotated, Union
from bson import ObjectId
from datetime import datetime
router = APIRouter()
@router.get("/tags", tags=["tags"], response_model=list[tags.TagsOut])
async def read_tags(
authorize: Annotated[bool, Depends(permissions_checker.PermissionChecker(roles=["Admin", "User"]))],
skip: int = 0,
limit: int = 20,
id_tags: str | None = None,
name: str | None = None
):
# Validate `skip` and `limit`
if limit < 1 or skip < 0 or limit < skip:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="`skip` should be >= 0 and `limit` should be > 0 and greater than `skip`.",
)
limit = limit + skip
# Initialize filters
filters = []
if name:
filters.append({"name": {"$eq": name, "$options": "i"}})
# Add ID filter
if id_tags:
try:
tags_id = ObjectId(id_tags)
filters.append({"_id": {"$eq": event_id}})
except Exception:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Invalid event ID format.")
# Combine all filters
object_search = {"$and": filters} if filters else {}
# Fetch and return results
tags_repository = tags.TagsRepository(database=database.database)
list_tags = []
for tag_index in tags_repository.find_by(object_search, limit=limit, skip=skip):
tag = tags.TagsOut(
id=tag_index.id,
name=tag_index.name
)
list_tags.append(event)
return list_tags
@router.get("/tags/count", tags=["tags"])
async def read_tags_count(authorize: Annotated[bool, Depends(permissions_checker.PermissionChecker(roles=["Admin", "User"]))]):
count = database.database.get_collection("tags").estimated_document_count()
content = {"count":count}
response = JSONResponse(content=content)
return response
@router.get("/tags/{item_id}", tags=["tags"], response_model=tags.Tags)
async def read_tags_id(item_id : str, authorize: Annotated[bool, Depends(permissions_checker.PermissionChecker(roles=["Admin"]))]):
tags_repository = tags.TagsRepository(database=database.database)
tag = tags_repository.find_one_by_id(ObjectId(item_id))
return tag
@router.delete("/tags/groups",tags=["tags"])
async def delete_tags_groups(authorize: Annotated[bool, Depends(permissions_checker.PermissionChecker(roles=["Admin"]))], tagsids: tags.TagsIDS | None = None):
if len(tagsids.ids) == 0:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="eventids should be greater than 0"
)
tag_repository = tags.TagsRepository(database=database.database)
for i in tagsids.ids:
tag = tag_repository.find_one_by_id(ObjectId(i))
tag_repository.delete_one(tag)
content = {"message": "tags removed"}
response = JSONResponse(content=content)
return response
@router.delete("/tags/{item_id}", tags=["tags"])
async def delete_tags_id(item_id : str, authorize: Annotated[bool, Depends(permissions_checker.PermissionChecker(roles=["Admin"]))]):
tag_repository = tags.TagsRepository(database=database.database)
tag = tag_repository.find_one_by_id(ObjectId(item_id))
event_repository.delete_one(event)
content = {"message": "tags delete"}
response = JSONResponse(content=content)
return responsed
@router.put("/tags", tags=["tags"], status_code=status.HTTP_201_CREATED)
async def update_tags(authorize: Annotated[bool, Depends(permissions_checker.PermissionChecker(roles=["Admin"]))], tagSingle: tags.TagsIn | None = None):
if tagSingle is None:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Body request is empty"
)
tag_repository = tags.TagsRepository(database=database.database)
tag = tag_repository.find_one_by({"name": {'$eq': tagSingle.name}})
if tag is not None:
raise HTTPException(
status_code=status.HTTP_204_NO_CONTENT,
detail="name"
)
tag = tags.Tags(name=tagSingle.name)
tag.created_at = datetime.today()
tag_repository.save(event)
content = {"message": "tags created"}
response = JSONResponse(content=content, status_code=status.HTTP_201_CREATED)
return response