feat: Add delete event functionality
- Add delete_event endpoint in backend-flask - Add cascade delete-orphan to Event model relationshipmaster
parent
8527d874d0
commit
bb82f20a47
|
@ -110,6 +110,26 @@ export class DefaultService {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* delete_event <DELETE>
|
||||||
|
* @param eventId
|
||||||
|
* @returns void
|
||||||
|
* @throws ApiError
|
||||||
|
*/
|
||||||
|
public deleteEvent(
|
||||||
|
eventId: number,
|
||||||
|
): CancelablePromise<void> {
|
||||||
|
return this.httpRequest.request({
|
||||||
|
method: 'DELETE',
|
||||||
|
url: '/api/events/{event_id}',
|
||||||
|
path: {
|
||||||
|
'event_id': eventId,
|
||||||
|
},
|
||||||
|
errors: {
|
||||||
|
422: `Unprocessable Content`,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* get_event <GET>
|
* get_event <GET>
|
||||||
* @param eventId
|
* @param eventId
|
||||||
|
|
|
@ -7,22 +7,8 @@ import { computed, reactive } from "vue";
|
||||||
export const useTeamsEventsStore = defineStore("teamsEvents", () => {
|
export const useTeamsEventsStore = defineStore("teamsEvents", () => {
|
||||||
const clientStore = useClientStore();
|
const clientStore = useClientStore();
|
||||||
const client = clientStore.client;
|
const client = clientStore.client;
|
||||||
//const eventsStore = useEventsStore();
|
|
||||||
|
|
||||||
const teamEvents = reactive<{ [teamId: number]: EventWithPlayerSchema[] }>({ });
|
const teamEvents = reactive<{ [teamId: number]: EventWithPlayerSchema[] }>({ });
|
||||||
//const teamEvents = computed(() => {
|
|
||||||
// console.log("Recomputing teamEvents");
|
|
||||||
|
|
||||||
// // map events to objects with teamId as key, and array of events as value
|
|
||||||
// return eventsStore.events
|
|
||||||
// .reduce((acc, event) => {
|
|
||||||
// if (!acc[event.teamId]) {
|
|
||||||
// acc[event.teamId] = [];
|
|
||||||
// }
|
|
||||||
// acc[event.teamId].push(event);
|
|
||||||
// return acc;
|
|
||||||
// }, { } as { [teamId: number]: EventSchema[] });
|
|
||||||
//});
|
|
||||||
|
|
||||||
function fetchTeamEvents(teamId: number) {
|
function fetchTeamEvents(teamId: number) {
|
||||||
return clientStore.call(
|
return clientStore.call(
|
||||||
|
@ -35,8 +21,8 @@ export const useTeamsEventsStore = defineStore("teamsEvents", () => {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function attendEvent(eventId: number) {
|
async function attendEvent(eventId: number) {
|
||||||
client.default.attendEvent(eventId)
|
return client.default.attendEvent(eventId)
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
let index = teamEvents[response.event.teamId]
|
let index = teamEvents[response.event.teamId]
|
||||||
.findIndex((event) => event.event.id == response.event.id);
|
.findIndex((event) => event.event.id == response.event.id);
|
||||||
|
@ -44,8 +30,8 @@ export const useTeamsEventsStore = defineStore("teamsEvents", () => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function unattendEvent(eventId: number) {
|
async function unattendEvent(eventId: number) {
|
||||||
client.default.unattendEvent(eventId)
|
return client.default.unattendEvent(eventId)
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
let index = teamEvents[response.event.teamId]
|
let index = teamEvents[response.event.teamId]
|
||||||
.findIndex((event) => event.event.id == response.event.id);
|
.findIndex((event) => event.event.id == response.event.id);
|
||||||
|
@ -53,8 +39,11 @@ export const useTeamsEventsStore = defineStore("teamsEvents", () => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteEvent(eventId: number) {
|
async function deleteEvent(eventId: number) {
|
||||||
// TODO: implement
|
return client.default.deleteEvent(eventId)
|
||||||
|
.then(() => {
|
||||||
|
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -102,6 +102,8 @@ def create_event(player_team: PlayerTeam, team_id: int, json: CreateEventJson, *
|
||||||
event.description = json.description
|
event.description = json.description
|
||||||
event.start_time = json.start_time
|
event.start_time = json.start_time
|
||||||
|
|
||||||
|
assert_team_authority(player_team)
|
||||||
|
|
||||||
db.session.add(event)
|
db.session.add(event)
|
||||||
db.session.flush()
|
db.session.flush()
|
||||||
db.session.refresh(event)
|
db.session.refresh(event)
|
||||||
|
@ -270,7 +272,9 @@ def update_event(player: Player, event_id: int, json: UpdateEventJson, **_):
|
||||||
event = db.session.query(Event).where(Event.id == event_id).one_or_none()
|
event = db.session.query(Event).where(Event.id == event_id).one_or_none()
|
||||||
if not event:
|
if not event:
|
||||||
abort(404)
|
abort(404)
|
||||||
assert_team_membership(player, event.team)
|
|
||||||
|
player_team = assert_team_membership(player, event.team)
|
||||||
|
assert_team_authority(player_team)
|
||||||
|
|
||||||
for player_event in event.players:
|
for player_event in event.players:
|
||||||
player_team = player_event.player_team
|
player_team = player_event.player_team
|
||||||
|
@ -288,3 +292,24 @@ def update_event(player: Player, event_id: int, json: UpdateEventJson, **_):
|
||||||
event.update_discord_message()
|
event.update_discord_message()
|
||||||
|
|
||||||
return EventSchema.from_model(event).dict(by_alias=True), 200
|
return EventSchema.from_model(event).dict(by_alias=True), 200
|
||||||
|
|
||||||
|
@api_events.delete("/<int:event_id>")
|
||||||
|
@spec.validate(
|
||||||
|
resp=Response(
|
||||||
|
HTTP_204=None,
|
||||||
|
),
|
||||||
|
operation_id="delete_event",
|
||||||
|
)
|
||||||
|
@requires_authentication
|
||||||
|
def delete_event(player: Player, event_id: int, **_):
|
||||||
|
event = db.session.query(Event).where(Event.id == event_id).one_or_none()
|
||||||
|
if not event:
|
||||||
|
abort(404)
|
||||||
|
|
||||||
|
player_team = assert_team_membership(player, event.team)
|
||||||
|
assert_team_authority(player_team)
|
||||||
|
|
||||||
|
db.session.delete(event)
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
return make_response({ }, 204)
|
||||||
|
|
|
@ -28,7 +28,11 @@ class Event(app_db.BaseModel):
|
||||||
discord_message_id: Mapped[int | None] = mapped_column(BigInteger, nullable=True)
|
discord_message_id: Mapped[int | None] = mapped_column(BigInteger, nullable=True)
|
||||||
|
|
||||||
team: Mapped["Team"] = relationship("Team", back_populates="events")
|
team: Mapped["Team"] = relationship("Team", back_populates="events")
|
||||||
players: Mapped[list["PlayerEvent"]] = relationship("PlayerEvent", back_populates="event")
|
players: Mapped[list["PlayerEvent"]] = relationship(
|
||||||
|
"PlayerEvent",
|
||||||
|
back_populates="event",
|
||||||
|
cascade="all, delete-orphan"
|
||||||
|
)
|
||||||
|
|
||||||
__table_args__ = (
|
__table_args__ = (
|
||||||
UniqueConstraint("team_id", "name", "start_time"),
|
UniqueConstraint("team_id", "name", "start_time"),
|
||||||
|
|
Loading…
Reference in New Issue