/// <summary>
        /// Used to get the studnet by their nickname
        /// </summary>
        /// <param name="nickname">The nickname of the student to be found</param>
        /// <returns>The student details</returns>
        public GetStudentResponse GetStudentByNickname(string nickname)
        {
            GetStudentResponse response = new GetStudentResponse();

            try
            {
                var dataLayer   = new StudentDatalayer();
                var nicknameDTO = dataLayer.GetStudentNicknameByNickname(nickname);

                if (nicknameDTO == null)
                {
                    response.Status = HttpStatusCode.NotFound;
                }
                else
                {
                    response.Nickname = nicknameDTO;
                    response.Status   = HttpStatusCode.OK;
                }
            }
            catch (Exception ex)
            {
                s_logger.Error(ex, "Unable to a get nickname");
                response.Status = HttpStatusCode.InternalServerError;
                response.StatusMessages.Add(new StatusMessage(HttpStatusCode.InternalServerError, "Unable to get nickname"));
            }

            return(response);
        }
        /// <summary>
        /// Used to get all of the student nicknames
        /// </summary>
        /// <returns>The response with the nickname list</returns>
        public GetAllNicknamesResponse GetAllNicknames()
        {
            GetAllNicknamesResponse response = new GetAllNicknamesResponse();

            try
            {
                var dataLayer = new StudentDatalayer();
                response.Nicknames = dataLayer.GetAllNicknames();

                if (response.Nicknames.Count > 0)
                {
                    response.Status = HttpStatusCode.OK;
                }
                else
                {
                    response.Status = HttpStatusCode.NotFound;
                }
            }
            catch (Exception ex)
            {
                s_logger.Error(ex, "Unable to a get nicknames");
                response.Status = HttpStatusCode.InternalServerError;
                response.StatusMessages.Add(new StatusMessage(HttpStatusCode.InternalServerError, "Unable to get nicknames"));
            }
            return(response);
        }
        /// <summary>
        /// Used to generate a new random nickname for admin purposes
        /// </summary>
        /// <returns>The response containing the nickname</returns>
        public GenerateNicknameResponse GenerateNickname()
        {
            var response = new GenerateNicknameResponse();

            try
            {
                string nickname = AlphaNumericStringGenerator.GetString(20);

                var dataLayer = new StudentDatalayer();

                var existingUsername = dataLayer.GetStudentNicknameByNickname(nickname);

                while (existingUsername != null)
                {
                    nickname         = AlphaNumericStringGenerator.GetString(20);
                    existingUsername = dataLayer.GetStudentNicknameByNickname(nickname);
                }

                response.Nickname = nickname;
                response.Status   = HttpStatusCode.OK;
            }
            catch (Exception ex)
            {
                s_logger.Error(ex, "Unable to generate nickname!");
                response.Status = HttpStatusCode.InternalServerError;
                response.StatusMessages.Add(new StatusMessage(HttpStatusCode.InternalServerError, "Unable to generate nickname!"));
            }
            return(response);
        }
        /// <summary>
        /// This method is responsible for validating a given student's nickname
        /// </summary>
        /// <param name="request">Request that contains the nickname information</param>
        /// <returns>Response which indicates success or failure</returns>
        public ValidateNicknameResponse ValidateNickname(ValidateNicknameRequest request)
        {
            var response = new ValidateNicknameResponse();

            try
            {
                var dataLayer = new StudentDatalayer();

                var existingNickname = dataLayer.GetStudentNicknameByNickname(request.Name);

                if (existingNickname == null)
                {
                    if (!string.IsNullOrEmpty(request.SID))
                    {
                        existingNickname = dataLayer.GetStudentNicknameByStudentID(request.SID);

                        if (existingNickname == null)
                        {
                            response.Status = HttpStatusCode.OK;
                        }
                        else
                        {
                            response.SID       = existingNickname.ID;
                            response.StudentId = existingNickname.StudentID;
                            response.Nickname  = existingNickname.Nickname;
                            response.Status    = HttpStatusCode.Accepted;
                        }
                    }
                    else
                    {
                        response.Status = HttpStatusCode.NotFound;
                    }
                }
                else if (existingNickname.StudentID == request.SID || string.IsNullOrEmpty(request.SID))
                {
                    response.Nickname  = existingNickname.Nickname;
                    response.StudentId = existingNickname.StudentID;
                    response.SID       = existingNickname.ID;
                    response.Status    = HttpStatusCode.Accepted;
                }
                else
                {
                    response.Status = HttpStatusCode.BadRequest;
                }
            }
            catch (Exception ex)
            {
                s_logger.Error(ex, "Unable to validate student's nickname!");
                response.Status = HttpStatusCode.InternalServerError;
                response.StatusMessages.Add(new StatusMessage(HttpStatusCode.InternalServerError, "Unable to validate student's nickname!"));
            }

            return(response);
        }
        /// <summary>
        /// This method is responsible for updating a specific students's nickname
        /// </summary>
        /// <param name="id">The StudentID of the student to be updated</param>
        /// <param name="request">The student's new nickname</param>
        /// <returns>The response that indicates if the update was successfull</returns>
        public EditStudentNicknameResponse EditStudentNickname(int id, EditStudentNicknameRequest request)
        {
            s_logger.Info("Editing student's nickname...");

            EditStudentNicknameResponse response = new EditStudentNicknameResponse();

            try
            {
                response = (EditStudentNicknameResponse)request.CheckValidation(response);

                if (response.Status == HttpStatusCode.BadRequest)
                {
                    return(response);
                }

                var dataLayer = new StudentDatalayer();

                var nickname = dataLayer.GetStudentNicknameByNickname(request.Nickname);

                if (nickname != null)
                {
                    response.Status = HttpStatusCode.BadRequest;
                    response.StatusMessages.Add(new StatusMessage(HttpStatusCode.BadRequest, "This nickname is already being used."));
                    return(response);
                }

                bool result = dataLayer.EditStudentNickname(id, request);

                if (result == false)
                {
                    throw new NotFoundException("Unable to find student!");
                }

                response.Result = result;
                response.Status = HttpStatusCode.OK;
            }
            catch (NotFoundException ex)
            {
                s_logger.Error(ex, "Unable to find student!");
                response.Status = HttpStatusCode.NotFound;
                response.StatusMessages.Add(new StatusMessage(HttpStatusCode.NotFound, "Unable to find student!"));
            }
            catch (Exception ex)
            {
                s_logger.Error(ex, "Unable to update student's nickname!");
                response.Status = HttpStatusCode.InternalServerError;
                response.StatusMessages.Add(new StatusMessage(HttpStatusCode.InternalServerError, "Unable to update student's nickname!"));
            }
            return(response);
        }
        /// <summary>
        /// Used to add a student nickname to the system
        /// </summary>
        /// <param name="request">The information required to add a student nickname</param>
        /// <returns>A response indictaes if the action was successful</returns>
        public AddStudentResponse AddStudentNickname(AddStudentRequest request)
        {
            AddStudentResponse response = new AddStudentResponse();

            try
            {
                response = (AddStudentResponse)request.CheckValidation(response);

                if (response.Status == HttpStatusCode.BadRequest)
                {
                    return(response);
                }

                StudentDatalayer studentDatalayer = new StudentDatalayer();
                var nickname = studentDatalayer.GetStudentNicknameByNickname(request.Nickname);

                if (nickname != null)
                {
                    response.Status = HttpStatusCode.BadRequest;
                    response.StatusMessages.Add(new StatusMessage(HttpStatusCode.BadRequest, "This nickname is already being used."));
                    return(response);
                }

                var dataLayer = new StudentDatalayer();
                int id        = dataLayer.AddStudentNickname(request);

                response.StudentID = id;
                response.Status    = HttpStatusCode.OK;
            }
            catch (Exception ex)
            {
                s_logger.Error(ex, "Unable to add a nickname");
                response.Status = HttpStatusCode.InternalServerError;
                response.StatusMessages.Add(new StatusMessage(HttpStatusCode.InternalServerError, "Unable to add a nickname"));
            }

            return(response);
        }
Пример #7
0
        /// <summary>
        /// Used to get a Zip file of all of the database tables as CSVs
        /// </summary>
        public DatabaseExportResponse ExportDatabase()
        {
            var response = new DatabaseExportResponse();

            try
            {
                FileProccessing proccessing = new FileProccessing();

                DateTime now = DateTime.Now;

                string exportName = $"databaseexport_{now.ToString("yyyyddMM_HHmmss")}";

                string fullZipPath = proccessing.CreateZip(_appSettings.DatabaseBackupDestination, exportName);

                if (string.IsNullOrEmpty(fullZipPath))
                {
                    s_logger.Error("Unable to create empty zip");
                    response.Status = HttpStatusCode.InternalServerError;
                    return(response);
                }
                else
                {
                    var helpdeskDataLayer = new HelpdeskDataLayer();
                    var unitDataLayer     = new UnitsDataLayer();
                    var usersDataLayer    = new UsersDataLayer();
                    var topicsDataLayer   = new TopicsDataLayer();
                    var studentDataLayer  = new StudentDatalayer();
                    var queueDataLayer    = new QueueDataLayer();
                    var checkInDataLayer  = new CheckInDataLayer();

                    DataTable helpdesks = helpdeskDataLayer.GetHelpdesksAsDataTable();
                    proccessing.SaveToZIPAsCSV(fullZipPath, "helpdesks", helpdesks);

                    DataTable timespans = helpdeskDataLayer.GetTimeSpansAsDataTable();
                    proccessing.SaveToZIPAsCSV(fullZipPath, "timespans", timespans);

                    DataTable helpdeskUnits = helpdeskDataLayer.GetHelpdeskUnitsAsDataTable();
                    proccessing.SaveToZIPAsCSV(fullZipPath, "helpdeskunits", helpdeskUnits);

                    DataTable users = usersDataLayer.GetUsersAsDataTable();
                    proccessing.SaveToZIPAsCSV(fullZipPath, "users", users);

                    DataTable units = unitDataLayer.GetUnitsAsDataTable();
                    proccessing.SaveToZIPAsCSV(fullZipPath, "units", units);

                    DataTable topics = topicsDataLayer.GetTopicsAsDataTable();
                    proccessing.SaveToZIPAsCSV(fullZipPath, "topics", topics);

                    DataTable students = studentDataLayer.GetStudentsAsDataTable();
                    proccessing.SaveToZIPAsCSV(fullZipPath, "students", students);

                    DataTable queuesItems = queueDataLayer.GetQueueItemsAsDataTable();
                    proccessing.SaveToZIPAsCSV(fullZipPath, "queueItems", queuesItems);

                    DataTable checkIns = checkInDataLayer.GetCheckInsAsDataTable();
                    proccessing.SaveToZIPAsCSV(fullZipPath, "checkInHistory", checkIns);

                    DataTable checkInQueueItems = checkInDataLayer.GetCheckInQueueItemsAsDataTable();
                    proccessing.SaveToZIPAsCSV(fullZipPath, "checkinqueueitem", checkInQueueItems);

                    response.Path   = fullZipPath;
                    response.Status = HttpStatusCode.OK;
                }
            }
            catch (Exception ex)
            {
                s_logger.Error(ex, "Unable to generate database export");
                response.Status = HttpStatusCode.InternalServerError;
            }
            return(response);
        }