77using Microsoft . AspNetCore . Http ;
88using ConferenceDTO ;
99
10- namespace BackEnd
10+ namespace BackEnd . Controllers
1111{
1212 [ Route ( "/api/[controller]" ) ]
1313 [ ApiController ]
1414 public class AttendeesController : ControllerBase
1515 {
16- private readonly ApplicationDbContext _db ;
16+ private readonly ApplicationDbContext _context ;
1717
18- public AttendeesController ( ApplicationDbContext db )
18+ public AttendeesController ( ApplicationDbContext context )
1919 {
20- _db = db ;
20+ _context = context ;
2121 }
2222
23- [ HttpGet ( "{id }" ) ]
24- public async Task < ActionResult < AttendeeResponse > > Get ( string id )
23+ [ HttpGet ( "{username }" ) ]
24+ public async Task < ActionResult < AttendeeResponse > > Get ( string username )
2525 {
26- var attendee = await _db . Attendees . Include ( a => a . SessionsAttendees )
26+ var attendee = await _context . Attendees . Include ( a => a . SessionsAttendees )
2727 . ThenInclude ( sa => sa . Session )
28- . SingleOrDefaultAsync ( a => a . UserName == id ) ;
28+ . SingleOrDefaultAsync ( a => a . UserName == username ) ;
2929
3030 if ( attendee == null )
3131 {
@@ -37,13 +37,26 @@ public async Task<ActionResult<AttendeeResponse>> Get(string id)
3737 return result ;
3838 }
3939
40+ [ HttpGet ( "{username}/sessions" ) ]
41+ public async Task < ActionResult < List < SessionResponse > > > GetSessions ( string username )
42+ {
43+ var sessions = await _context . Sessions . AsNoTracking ( )
44+ . Include ( s => s . Track )
45+ . Include ( s => s . SessionSpeakers )
46+ . ThenInclude ( ss => ss . Speaker )
47+ . Where ( s => s . SessionAttendees . Any ( sa => sa . Attendee . UserName == username ) )
48+ . Select ( m => m . MapSessionResponse ( ) )
49+ . ToListAsync ( ) ;
50+ return sessions ;
51+ }
52+
4053 [ HttpPost ]
4154 [ ProducesResponseType ( StatusCodes . Status201Created ) ]
4255 [ ProducesResponseType ( StatusCodes . Status409Conflict ) ]
4356 public async Task < ActionResult < AttendeeResponse > > Post ( ConferenceDTO . Attendee input )
4457 {
4558 // Check if the attendee already exists
46- var existingAttendee = await _db . Attendees
59+ var existingAttendee = await _context . Attendees
4760 . Where ( a => a . UserName == input . UserName )
4861 . FirstOrDefaultAsync ( ) ;
4962
@@ -60,33 +73,31 @@ public async Task<ActionResult<AttendeeResponse>> Post(ConferenceDTO.Attendee in
6073 EmailAddress = input . EmailAddress
6174 } ;
6275
63- _db . Attendees . Add ( attendee ) ;
64- await _db . SaveChangesAsync ( ) ;
76+ _context . Attendees . Add ( attendee ) ;
77+ await _context . SaveChangesAsync ( ) ;
6578
6679 var result = attendee . MapAttendeeResponse ( ) ;
6780
68- return CreatedAtAction ( nameof ( Get ) , new { id = result . UserName } , result ) ;
81+ return CreatedAtAction ( nameof ( Get ) , new { username = result . UserName } , result ) ;
6982 }
7083
71- [ HttpPost ( "{username}/session/{sessionId:int }" ) ]
84+ [ HttpPost ( "{username}/session/{sessionId}" ) ]
7285 [ ProducesResponseType ( StatusCodes . Status200OK ) ]
7386 [ ProducesResponseType ( StatusCodes . Status400BadRequest ) ]
7487 [ ProducesResponseType ( StatusCodes . Status404NotFound ) ]
7588 [ ProducesDefaultResponseType ]
7689 public async Task < ActionResult < AttendeeResponse > > AddSession ( string username , int sessionId )
7790 {
78- var attendee = await _db . Attendees . Include ( a => a . SessionsAttendees )
91+ var attendee = await _context . Attendees . Include ( a => a . SessionsAttendees )
7992 . ThenInclude ( sa => sa . Session )
80- . Include ( a => a . ConferenceAttendees )
81- . ThenInclude ( ca => ca . Conference )
8293 . SingleOrDefaultAsync ( a => a . UserName == username ) ;
8394
8495 if ( attendee == null )
8596 {
8697 return NotFound ( ) ;
8798 }
8899
89- var session = await _db . Sessions . FindAsync ( sessionId ) ;
100+ var session = await _context . Sessions . FindAsync ( sessionId ) ;
90101
91102 if ( session == null )
92103 {
@@ -95,45 +106,45 @@ public async Task<ActionResult<AttendeeResponse>> AddSession(string username, in
95106
96107 attendee . SessionsAttendees . Add ( new SessionAttendee
97108 {
98- AttendeeID = attendee . ID ,
99- SessionID = sessionId
109+ AttendeeId = attendee . Id ,
110+ SessionId = sessionId
100111 } ) ;
101112
102- await _db . SaveChangesAsync ( ) ;
113+ await _context . SaveChangesAsync ( ) ;
103114
104115 var result = attendee . MapAttendeeResponse ( ) ;
105116
106117 return result ;
107118 }
108119
109- [ HttpDelete ( "{username}/session/{sessionId:int }" ) ]
120+ [ HttpDelete ( "{username}/session/{sessionId}" ) ]
110121 [ ProducesResponseType ( StatusCodes . Status204NoContent ) ]
111122 [ ProducesResponseType ( StatusCodes . Status400BadRequest ) ]
112123 [ ProducesResponseType ( StatusCodes . Status404NotFound ) ]
113124 [ ProducesDefaultResponseType ]
114125 public async Task < IActionResult > RemoveSession ( string username , int sessionId )
115126 {
116- var attendee = await _db . Attendees . Include ( a => a . SessionsAttendees )
127+ var attendee = await _context . Attendees . Include ( a => a . SessionsAttendees )
117128 . SingleOrDefaultAsync ( a => a . UserName == username ) ;
118129
119130 if ( attendee == null )
120131 {
121132 return NotFound ( ) ;
122133 }
123134
124- var session = await _db . Sessions . FindAsync ( sessionId ) ;
135+ var session = await _context . Sessions . FindAsync ( sessionId ) ;
125136
126137 if ( session == null )
127138 {
128139 return BadRequest ( ) ;
129140 }
130141
131- var sessionAttendee = attendee . SessionsAttendees . FirstOrDefault ( sa => sa . SessionID == sessionId ) ;
142+ var sessionAttendee = attendee . SessionsAttendees . FirstOrDefault ( sa => sa . SessionId == sessionId ) ;
132143 attendee . SessionsAttendees . Remove ( sessionAttendee ) ;
133144
134- await _db . SaveChangesAsync ( ) ;
145+ await _context . SaveChangesAsync ( ) ;
135146
136147 return NoContent ( ) ;
137148 }
138149 }
139- }
150+ }
0 commit comments