From 7dec0144d96c2c1f701182406eb2fba2717c16c9 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Mon, 2 Nov 2020 03:41:57 +0100 Subject: [PATCH] [Plugin] schedule: Fixed models and controller --- .../plugins/schedule/event_controller.py | 61 ++++++++++++------- flaschengeist/plugins/schedule/models.py | 18 +++--- 2 files changed, 49 insertions(+), 30 deletions(-) diff --git a/flaschengeist/plugins/schedule/event_controller.py b/flaschengeist/plugins/schedule/event_controller.py index c8faf8b..aa086af 100644 --- a/flaschengeist/plugins/schedule/event_controller.py +++ b/flaschengeist/plugins/schedule/event_controller.py @@ -3,7 +3,46 @@ from sqlalchemy.exc import IntegrityError from flaschengeist import logger from flaschengeist.database import db -from flaschengeist.plugins.schedule.models import EventKind, Event, EventSlot, JobSlot, JobKind +from flaschengeist.plugins.schedule.models import EventType, Event, EventSlot, JobSlot, JobType + + +def get_event_types(): + return EventType.query.all() + + +def get_event_type(name): + et = EventType.query.filter(EventType.name == name).one_or_none() + if not et: + raise NotFound + return et + + +def create_event_type(name): + try: + event = EventType(name=name) + db.session.add(event) + db.session.commit() + return event + except IntegrityError: + raise BadRequest("Name already exists") + + +def rename_event_type(name, new_name): + event_type = get_event_type(name) + event_type.name = new_name + try: + db.session.commit() + except IntegrityError: + raise BadRequest("Name already exists") + + +def delete_event_type(name): + event_type = get_event_type(name) + db.session.delete(event_type) + try: + db.session.commit() + except IntegrityError: + raise BadRequest("Type still in use") def get_event(id): @@ -53,26 +92,6 @@ def create_job_kind(name): raise BadRequest("Name already exists") -def create_event_kind(name): - try: - event = EventKind(name=name) - db.session.add(event) - db.session.commit() - return event - except IntegrityError: - logger.debug("IntegrityError: Looks like there is a name collision", exc_info=True) - raise BadRequest("Name already exists") - - -def rename_event_kind(id, name): - ek = EventKind.query.get(id) - if not ek: - raise NotFound - ek.name = name - try: - db.session.commit() - except IntegrityError: - raise BadRequest("Name already exists") def add_slot(event, job_slots, needed_persons, start=None, end=None): diff --git a/flaschengeist/plugins/schedule/models.py b/flaschengeist/plugins/schedule/models.py index a6792da..4ab1455 100644 --- a/flaschengeist/plugins/schedule/models.py +++ b/flaschengeist/plugins/schedule/models.py @@ -45,15 +45,15 @@ class Job(db.Model, ModelSerializeMixin): class JobSlot(db.Model, ModelSerializeMixin): __tablename__ = "job_slot" - _kind_id = db.Column("kind_id", db.Integer, db.ForeignKey("job_kind.id")) + _type_id = db.Column("type_id", db.Integer, db.ForeignKey("job_type.id")) _event_slot_id = db.Column("event_slot_id", db.Integer, db.ForeignKey("event_slot.id")) id: int = db.Column(db.Integer, primary_key=True) - type: JobType = db.relationship("JobKind") - users: [Job] = db.relationship("Job", back_populates="_slot") + type: JobType = db.relationship("JobType") + users: [Job] = db.relationship("Job", back_populates="slot_") required_jobs: float = db.Column(db.Numeric(precision=4, scale=2)) - event_slot_ = db.relationship("EventSlot", back_populates="slots") + event_slot_ = db.relationship("EventSlot", back_populates="jobs") ########## # Events # @@ -68,19 +68,19 @@ class EventSlot(db.Model, ModelSerializeMixin): id: int = db.Column(db.Integer, primary_key=True) start: datetime = db.Column(db.DateTime) end: Optional[datetime] = db.Column(db.DateTime) - jobs: [JobSlot] = db.relationship("JobSlot", back_populates="_event_slot") + jobs: [JobSlot] = db.relationship("JobSlot", back_populates="event_slot_") - event_ = db.relationship("Event", back_populates="_slots") + event_ = db.relationship("Event", back_populates="slots") class Event(db.Model, ModelSerializeMixin): """Model for an Event""" __tablename__ = "event" - _kind_id = db.Column("kind_id", db.Integer, db.ForeignKey("event_kind.id", ondelete="CASCADE"), nullable=False) + _type_id = db.Column("type_id", db.Integer, db.ForeignKey("event_type.id", ondelete="CASCADE"), nullable=False) id: int = db.Column(db.Integer, primary_key=True) begin: datetime = db.Column(db.DateTime, nullable=False) end: datetime = db.Column(db.DateTime) description: str = db.Column(db.String(240)) - type: EventType = db.relationship("EventKind") - slots: [EventSlot] = db.relationship("EventSlot", back_populates="_event", cascade="all, delete") + type: EventType = db.relationship("EventType") + slots: [EventSlot] = db.relationship("EventSlot", back_populates="event_", cascade="all, delete")