public int Post([FromBody]VisitExtension visitExt)
        {
            if (visitExt == null)
            {
                ThrowBadRequest();
            }
            var user = GetCurrentUser();

            var pack = db.Packs.FirstOrDefault(p => p.Id == visitExt.PackId);

            if (pack == null)
            {
                ThrowNotFound();
            }

            var course = db.Courses.Find(pack.CourseId);

            if (course.UserId != user.Id)
            {
                ThrowBadRequest();
            }

            LessonCommitService service = new LessonCommitService(db);
            return service.CommitVisit(visitExt);
        }
        public IHttpActionResult Post([FromBody] NewLessonData data)
        {
            if(data == null)
            {
                return BadRequest();
            }

            var user = GetCurrentUser();

            var pack = db.Packs.FirstOrDefault(p => p.Id == data.packId);

            if (pack == null)
            {
                return NotFound();
            }

            var course = db.Courses.Find(pack.CourseId);

            if (course.UserId != user.Id)
            {
                return BadRequest();
            }

            LessonCommitService service = new LessonCommitService(db);

            bool actionResult = service.CreateLesson(data.packId, data.date);

            if(actionResult)
            {
                db.SaveChanges();
                return Ok();
            }

            return BadRequest();
        }
        public Lesson Get([FromUri] int packId, [FromUri] DateTime date)
        {
            var user = GetCurrentUser();

            var pack = db.Packs.FirstOrDefault(p => p.Id == packId);

            if (pack == null)
            {
                ThrowBadRequest();
            }

            var course = db.Courses.Find(pack.CourseId);

            if (course.UserId != user.Id)
            {
                ThrowBadRequest();
            }

            LessonCommitService service = new LessonCommitService(db);
            var lesson = service.GetLesson(packId, date);

            if (lesson != null)
            {
                return lesson;
            }
            else
            {
                ThrowBadRequest();
                return null;
            }
        }
        public Visit Get([FromUri] int packId, [FromUri] DateTime date, [FromUri] int studentId)
        {
            var user = GetCurrentUser();

            var pack = db.Packs.FirstOrDefault(p => p.Id == packId);

            if (pack == null)
            {
                ThrowBadRequest();
            }

            var course = db.Courses.Find(pack.CourseId);

            if (course.UserId != user.Id)
            {
                ThrowBadRequest();
            }

            LessonCommitService service = new LessonCommitService(db);
            return service.GetVisit(packId, date, studentId);
        }
        public IHttpActionResult Get(int id)
        {
            var user = GetCurrentUser();

            var pack = db.Packs.FirstOrDefault(p => p.Id == id);

            if (pack == null)
            {
                return NotFound();
            }

            var course = db.Courses.Find(pack.CourseId);

            if (course.UserId != user.Id)
            {
                return BadRequest();
            }

            LessonCommitService service = new LessonCommitService(db);
            return Json(service.GetPackDates(id));
        }