PageRenderTime 43ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/Gradebook.Data/Repositories/TaskRepository.cs

https://bitbucket.org/academium/gradebook
C# | 102 lines | 81 code | 21 blank | 0 comment | 22 complexity | 5650f61dffc98d3e248283585153dc06 MD5 | raw file
  1. using Gradebook.Contracts.Repositories;
  2. using Gradebook.Model;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data.Entity;
  6. using System.Linq;
  7. namespace Gradebook.Data.Repositories
  8. {
  9. public class TaskRepository : Repository<Task>, ITaskRepository
  10. {
  11. public TaskRepository(DbContext dbContext) : base(dbContext) { }
  12. public override Task Read(int id)
  13. {
  14. if (!Contains(id))
  15. throw new ArgumentException("id");
  16. return DbSet.Include(x => x.Assessment).Include(x => x.Type).Single(x => x.Id == id);
  17. }
  18. public IEnumerable<Task> GetByAssessment(int assessmentId)
  19. {
  20. if (!DbContext.Set<Task>().Any(x => x.Id == assessmentId))
  21. throw new ArgumentException("assessmentId");
  22. return DbSet.Include(x => x.Assessment).Where(x => x.AssessmentId == assessmentId);
  23. }
  24. public IEnumerable<Task> GetByStudent(int studentId)
  25. {
  26. if (!DbContext.Set<Student>().Any(x => x.Id == studentId))
  27. throw new ArgumentException("studentId");
  28. var student = DbContext.Set<Student>()
  29. .Include(x => x.ClassCodes.Select(y => y.Code).Select(y => y.Code).Select(y => y.Tasks))
  30. .Include(x => x.ClassCodes.Select(y => y.Code).Select(y => y.Code).Select(y => y.Subject).Select(y => y.TaskTypes))
  31. .Single(x => x.Id == studentId);
  32. return student.ClassCodes
  33. .Select(x => x.Code)
  34. .Select(x => x.Code)
  35. .SelectMany(x => x.Tasks);
  36. }
  37. public IEnumerable<Task> GetByCode(int codeId)
  38. {
  39. if (!DbContext.Set<ClassCode>().Any(x => x.Id == codeId))
  40. throw new ArgumentException("codeId");
  41. return GetAll().Where(x => x.CodeId == codeId);
  42. }
  43. public IEnumerable<Task> GetByTerm(int termId)
  44. {
  45. if (!DbContext.Set<Term>().Any(x => x.Id == termId))
  46. throw new ArgumentException("termId");
  47. return DbSet
  48. .Include(x => x.Code)
  49. .Include(x => x.Assessment)
  50. .Include(x => x.Type)
  51. .Where(x => x.Code.TeacherClassCodes.Any(y => y.TermId == termId));
  52. }
  53. public IEnumerable<Task> GetLinked(int taskId)
  54. {
  55. if (!Contains(taskId))
  56. throw new ArgumentException("taskId");
  57. var task = DbSet.Include(x => x.Assessment).Single(x => x.Id == taskId);
  58. if (!task.AssessmentId.HasValue) return new Task[0];
  59. return task.Assessment.Tasks;
  60. }
  61. public int GetStatus(int taskId)
  62. {
  63. if (!Contains(taskId))
  64. throw new ArgumentException("taskId");
  65. var task = DbSet
  66. .Include(x => x.Grades)
  67. .Include(x => x.Code.TeacherClassCodes.Select(o => o.StudentClassCodes))
  68. .Single(x => x.Id == taskId);
  69. var studentCount = task.Code.TeacherClassCodes
  70. .Where(x => x.ClassCodeId == task.CodeId)
  71. .SelectMany(x => x.StudentClassCodes)
  72. .Count();
  73. if (studentCount == 0) return 0;
  74. return task.Grades.Count / studentCount;
  75. }
  76. public override IQueryable<Task> GetAll()
  77. {
  78. return DbSet.Include(x => x.Assessment).Include(x => x.Type);
  79. }
  80. }
  81. }