@@ -6,15 +6,29 @@ namespace MarkMe.Core.Repositories
66{
77 public class AttendanceRepository ( IDatabase _database ) : IAttendanceRepository
88 {
9- public async Task < IEnumerable < AttendanceDataModel > > AddAsync ( AttendanceDTO obj )
9+ public async Task < IEnumerable < AttendanceDataModel > > AddAsync ( AttendanceDTO obj , string courseTitle , string userEmail )
1010 {
11+ // In place of Class Representative Student Id we will use when the login of the CR will be created and then we will use it's id.
12+ var description = $ "Marked Attendance for { courseTitle } .";
1113 var sql = """
1214 INSERT INTO Attendances (StudentId, CourseId, MarkedBy, DateMarked)
13- VALUES (@StudentId, @CourseId, 1, GETDATE())
15+ VALUES (@StudentId, @CourseId, (Select UserId from Users where Email =@Email), GETDATE())
16+
17+ IF EXISTS(Select * from Users where Email =@Email AND UserId = 3)
18+ BEGIN
19+ INSERT INTO Activities (Description, Date, ClassRepresentativeStudentId, ClassRepresentativeCourseId)
20+ Values (@description, GETDATE(), 2, @CourseId)
21+ END
1422 """ ;
15- var rowsEffected = await _database . ExecuteAsync ( sql , parameters : obj . StudentIds . Select ( studentId => new { CourseId = obj . CourseId , StudentId = studentId } ) ) ;
23+ var parameters = obj . StudentIds . Select ( studentId => new
24+ {
25+ obj . CourseId ,
26+ StudentId = studentId ,
27+ Email = userEmail ,
28+ description
29+ } ) ;
1630
17- // Query Added
31+ var rowsAffected = await _database . ExecuteAsync ( sql , parameters ) ;
1832 var attendanceDTO = await GetByCourseIdAsync ( obj . CourseId ) ;
1933 return attendanceDTO ! ;
2034 }
@@ -50,23 +64,26 @@ public async Task<bool> BulkDeleteAsync(BulkDeleteAttendanceDTO attendanceIds)
5064 public async Task < IEnumerable < AttendanceDataModel > > GetAllAsync ( )
5165 {
5266 var sql = """
53- SELECT a.AttendanceId, a.CourseId, a.StudentId, (s.FirstName + ' ' + s.LastName) AS Name, s.UniversityRollNo, s.CollegeRollNo, c.Code, c.Title, c.Semester, a.DateMarked, (u.FirstName + ' ' + u.LastName ) AS MarkedBy
67+ SELECT a.AttendanceId, a.CourseId, a.StudentId, (s.FirstName + ' ' + s.LastName) AS Name, s.UniversityRollNo, s.CollegeRollNo, c.Code AS CourseCode , c.Title AS CourseTitle , c.Semester, a.DateMarked, (u.FirstName + ' ' + u.LastName ) AS MarkedBy
5468 FROM Attendances a
5569 INNER JOIN Students s
5670 ON s.StudentId = a.StudentId
5771 INNER JOIN Users u
5872 ON a.MarkedBy = u.UserId
5973 INNER JOIN Courses c
60- ON a.CourseId = c.CourseId
74+ ON a.CourseId = c.CourseId
75+ ORDER BY a.DateMarked DESC
6176 """ ;
6277 var attendance = await _database . QueryAsync < AttendanceDataModel > ( sql ) ;
6378 return attendance ;
6479 }
6580
81+
82+
6683 public async Task < IEnumerable < AttendanceDataModel ? > > GetByCourseIdAsync ( int courseId )
6784 {
6885 var sql = """
69- SELECT a.AttendanceId, a.CourseId, a.StudentId, (s.FirstName + ' ' + s.LastName) AS Name, s.UniversityRollNo, s.CollegeRollNo, c.Code, c.Title, c.Semester, a.DateMarked, (u.FirstName + ' ' + u.LastName ) AS MarkedBy
86+ SELECT a.AttendanceId, a.CourseId, a.StudentId, (s.FirstName + ' ' + s.LastName) AS Name, s.UniversityRollNo, s.CollegeRollNo, c.Code AS CourseCode , c.Title AS CourseTitle , c.Semester, a.DateMarked, (u.FirstName + ' ' + u.LastName ) AS MarkedBy
7087 FROM Attendances a
7188 INNER JOIN Students s
7289 ON s.StudentId = a.StudentId
@@ -75,6 +92,7 @@ INNER JOIN Users u
7592 INNER JOIN Courses c
7693 ON a.CourseId = c.CourseId
7794 WHERE a.CourseId = @CourseId
95+ ORDER BY a.DateMarked DESC
7896 """ ;
7997 var attendance = await _database . QueryAsync < AttendanceDataModel > ( sql , new { CourseId = courseId } ) ;
8098 return attendance ;
@@ -94,18 +112,47 @@ public async Task<AttendanceDataModel> UpdateAsync(int attendanceId, UpdateAtten
94112 public async Task < AttendanceDataModel ? > GetByIdAsync ( int attendanceId )
95113 {
96114 var sql = """
97- SELECT a.AttendanceId, a.CourseId, a.StudentId, (s.FirstName + ' ' + s.LastName) AS Name, s.UniversityRollNo, s.CollegeRollNo, c.Code, c.Title, c.Semester, a.DateMarked, (u.FirstName + ' ' + u.LastName ) AS MarkedBy
115+ SELECT a.AttendanceId, a.CourseId, a.StudentId, (s.FirstName + ' ' + s.LastName) AS Name, s.UniversityRollNo, s.CollegeRollNo, c.Code AS CourseCode , c.Title AS CourseTitle , c.Semester, a.DateMarked, (u.FirstName + ' ' + u.LastName ) AS MarkedBy
98116 FROM Attendances a
99117 INNER JOIN Students s
100118 ON s.StudentId = a.StudentId
101119 INNER JOIN Users u
102120 ON a.MarkedBy = u.UserId
103121 INNER JOIN Courses c
104122 ON a.CourseId = c.CourseId
105- WHERE a.AttendanceId = @attendanceId
123+ WHERE a.AttendanceId = @attendanceId
124+ ORDER BY a.DateMarked DESC
106125 """ ;
107126 var attendance = await _database . QuerySingleAsync < AttendanceDataModel > ( sql , new { attendanceId } ) ;
108127 return attendance ;
109128 }
129+
130+ public async Task < IEnumerable < CoursesDTO > > GetCoursesAsync ( )
131+ {
132+ var sql = """
133+ SELECT c.CourseId, c.Title AS CourseName, c.Code AS CourseCode FROM ClassRepresentatives cr
134+ INNER JOIN Courses c ON cr.CourseId = c.CourseId
135+ WHERE StudentId = 2
136+ """ ;
137+ return await _database . QueryAsync < CoursesDTO > ( sql ) ;
138+ }
139+
140+ public async Task < IEnumerable < CoursesDTO > > GetTutorCoursesAsync ( string email )
141+ {
142+ var sql = """
143+ Select CourseId, Code AS CourseCode, Title AS CourseName from Courses Where AssignedTo = (Select UserId from Users where Email =@Email)
144+ """ ;
145+ return await _database . QueryAsync < CoursesDTO > ( sql , new { Email = email } ) ;
146+ }
147+
148+ public async Task < IEnumerable < ValidStudents > > GetValidStudents ( List < string > rollNos )
149+ {
150+ var sql = """
151+ SELECT StudentId, CollegeRollNo AS RollNo FROM Students
152+ WHERE CollegeRollNo IN @RollNo
153+ """ ;
154+ var validStudents = await _database . QueryAsync < ValidStudents > ( sql , new { RollNo = rollNos } ) ;
155+ return validStudents ;
156+ }
110157 }
111158}
0 commit comments