using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using ECPDAL.Meeting.DTOs; namespace ECPDAL.Meeting.Interfaces; public interface IMeetingDAL { Task GetMeetingAsync(int meetingId, LoginDTO login, CancellationToken ct); /// Meeting-type dropdown (MGCM/GCMTYPEID) — Planning/Review/Standup/Retrospective. /// Dynamic — GcmTypeId is resolved at runtime by EnsureMeetingTypeGcmTypeIdAsync, never /// hardcoded. Task> GetSelectListMeetingTypeAsync(int gcmTypeId, LoginDTO login, CancellationToken ct); /// Resolves MGCMTYPE.GCMTYPEID for GCMTYPECODE_MEETINGTYPE, auto-seeding the /// MGCMTYPE row and its 4 MGCM rows (Planning/Review/Standup/Retrospective) on first use so /// this works in any environment without a manual DBA seeding step. Task EnsureMeetingTypeGcmTypeIdAsync(LoginDTO login, CancellationToken ct); /// Generic filter list via CriteriaDTO (FieldName/OperationType/JoinType) — e.g. /// OrganizerUserId, ParticipantUserId (EXISTS against TMEETINGPARTICIPANT), StartOn/EndOn /// range, MeetingTypeId, Status, ObjectTypeId/ObjectId. Null or empty criteria returns /// everything (still tenant-scoped by DatabaseName). Task> GetMeetingListAsync(CriteriaDTO? criteriaDTO, LoginDTO login, CancellationToken ct); Task SaveMeetingAsync(MeetingDTO dto, LoginDTO login, CancellationToken ct); Task UpdateMeetingAsync(MeetingDTO dto, LoginDTO login, CancellationToken ct); Task UpdateMeetingStatusAsync(int meetingId, byte newStatus, int modifiedById, LoginDTO login, CancellationToken ct); Task CancelMeetingAsync(int meetingId, int modifiedById, LoginDTO login, CancellationToken ct); Task> GetParticipantsForMeetingAsync(int meetingId, LoginDTO login, CancellationToken ct); Task GetParticipantAsync(int meetingId, int userId, LoginDTO login, CancellationToken ct); Task AddParticipantAsync(MeetingParticipantDTO dto, LoginDTO login, CancellationToken ct); Task UpdateParticipantAttendanceAsync(int meetingId, int userId, byte attendanceStatus, int modifiedById, LoginDTO login, CancellationToken ct); Task RemoveParticipantAsync(int meetingId, int userId, LoginDTO login, CancellationToken ct); /// "Invite participant" picker — active users not already a participant of the meeting. Task> GetSelectListParticipantAsync(int meetingId, LoginDTO login, CancellationToken ct); }