diff --git a/backend/app/api/v1/routes/events.py b/backend/app/api/v1/routes/events.py index 3362aaa..a11cfa0 100644 --- a/backend/app/api/v1/routes/events.py +++ b/backend/app/api/v1/routes/events.py @@ -39,6 +39,7 @@ def create_event_route(event: EventCreate, db: Session = Depends(get_db)): @router.get( "/{event_id}", response_model=EventOut, + response_model_exclude_none=True, summary="Get event by ID", description="Return a single event by its ID. Includes tags and fields.", responses={ diff --git a/backend/app/modules/events/crud.py b/backend/app/modules/events/crud.py index c453ec2..8e1de02 100644 --- a/backend/app/modules/events/crud.py +++ b/backend/app/modules/events/crud.py @@ -5,7 +5,11 @@ def create_event(db: Session, event: schemas.EventCreate): - db_event = models.Event(name=event.name, description=event.description) + db_event = models.Event( + name=event.name, + description=event.description, + links=[link.model_dump() for link in event.links] if event.links else [], + ) db.add(db_event) db.commit() db.refresh(db_event) @@ -44,6 +48,7 @@ def update_event(db: Session, event_id: int, event: schemas.EventCreate): db_event.name = event.name db_event.description = event.description + db_event.links = [link.model_dump() for link in event.links] if event.links else [] if event.tags is not None: db.query(models.EventTag).filter( diff --git a/backend/app/modules/events/schemas.py b/backend/app/modules/events/schemas.py index fbbf884..43b88c8 100644 --- a/backend/app/modules/events/schemas.py +++ b/backend/app/modules/events/schemas.py @@ -12,6 +12,7 @@ class LinkType(str, Enum): figma = "figma" miro = "miro" confluence = "confluence" + jira = "jira" notion = "notion" loom = "loom" slack = "slack" @@ -24,6 +25,8 @@ class EventLink(BaseModel): url: str label: Optional[str] = None + model_config = ConfigDict(exclude_none=False) + class EventBase(BaseModel): name: str diff --git a/backend/app/modules/fields/crud.py b/backend/app/modules/fields/crud.py index 3d9ba7b..fc1b687 100644 --- a/backend/app/modules/fields/crud.py +++ b/backend/app/modules/fields/crud.py @@ -1,6 +1,8 @@ from sqlalchemy import func from sqlalchemy.orm import Session +from app.shared.models import EventField + from . import models, schemas @@ -37,9 +39,7 @@ def update_field(db: Session, field_id: int, field: schemas.FieldCreate): def delete_field(db: Session, field_id: int): db_field = db.query(models.Field).filter(models.Field.id == field_id).first() if db_field: - db.query(models.EventField).filter( - models.EventField.field_id == field_id - ).delete() + db.query(EventField).filter(EventField.field_id == field_id).delete() db.delete(db_field) db.commit() return db_field @@ -48,8 +48,8 @@ def delete_field(db: Session, field_id: int): def get_field_event_count(db: Session, field_id: int): return ( - db.query(func.count(models.EventField.event_id)) - .filter(models.EventField.field_id == field_id) + db.query(func.count(EventField.event_id)) + .filter(EventField.field_id == field_id) .scalar() ) diff --git a/backend/app/modules/tags/crud.py b/backend/app/modules/tags/crud.py index 44f2c12..1c56d77 100644 --- a/backend/app/modules/tags/crud.py +++ b/backend/app/modules/tags/crud.py @@ -1,5 +1,7 @@ from sqlalchemy.orm import Session +from app.shared.models import EventTag + from . import models, schemas @@ -34,7 +36,7 @@ def update_tag(db: Session, tag_id: str, tag: schemas.TagCreate): def delete_tag(db: Session, tag_id: str): db_tag = db.query(models.Tag).filter(models.Tag.id == tag_id).first() if db_tag: - db.query(models.EventTag).filter(models.EventTag.tag_id == tag_id).delete() + db.query(EventTag).filter(EventTag.tag_id == tag_id).delete() db.delete(db_tag) db.commit() return db_tag diff --git a/frontend/src/modules/events/components/EventDetailsCard.vue b/frontend/src/modules/events/components/EventDetailsCard.vue index 651389c..7b0606f 100644 --- a/frontend/src/modules/events/components/EventDetailsCard.vue +++ b/frontend/src/modules/events/components/EventDetailsCard.vue @@ -12,12 +12,13 @@ import DetailsCardAttribute from '@/shared/components/layout/DetailsCardAttribut import { getEventFieldsColumns } from '@/modules/events/components/eventFieldsColumns' import TagScrollArea from '@/modules/tags/components/TagScrollArea.vue' import { useEventExample } from '@/modules/events/composables/useEventExample' +import EventLinks from '@/modules/events/components/EventLinks.vue' const props = defineProps<{ event: Event }>() -const eventExample = useEventExample(props.event) +const eventExample = useEventExample(props.event.fields) const emit = defineEmits<{ (e: 'edit'): void @@ -61,7 +62,7 @@ const columns = getEventFieldsColumns()