public HttpResponseMessage Post(int id, RememberOptionModel model)
        {
            if (!ModelState.IsValid)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, ModelState.GetErrors()));
            }

            var app = config.Applications.All.SingleOrDefault(x => x.ID == id);

            if (app == null)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound));
            }

            var rememberOption = RememberOptionParser.Parse(model);


            if (app.RememberOptions.Any(x => x.Value == rememberOption.Value))
            {
                ModelState.AddModelError("", "That Remember Option already exists");
                return(Request.CreateResponse(HttpStatusCode.BadRequest, ModelState.GetErrors()));
            }
            app.RememberOptions.Add(rememberOption);
            config.SaveChanges();

            return(Request.CreateResponse(HttpStatusCode.OK, new
            {
                rememberOption.ID,
                rememberOption.OptionLabel,
                rememberOption.Value
            }));
        }
コード例 #2
0
        public static RememberOption Parse(RememberOptionModel model)
        {
            int    expirationValue = 0;
            string timeUnit        = null;

            switch (model.OptionSelect)
            {
            case 1:
                timeUnit = model.UserValue == 1 ? "hour" : "hours";
                break;

            case 24:
                timeUnit = model.UserValue == 1 ? "day" : "days";
                break;

            case 168:
                timeUnit = model.UserValue == 1 ? "week" : "weeks";
                break;

            case 720:
                timeUnit = model.UserValue == 1 ? "month" : "months";
                break;

            case 8640:
                timeUnit = model.UserValue == 1 ? "year" : "years";
                break;

            case -1:
                expirationValue = model.OptionSelect;
                break;

            default:
                throw new Exception("Wrong expiration time unit");
            }

            string rememberOptionLabel;

            if (model.OptionSelect != -1 && model.UserValue != null)
            {
                expirationValue     = model.OptionSelect * (int)model.UserValue;
                rememberOptionLabel = model.UserValue + " " + timeUnit;
            }
            else
            {
                rememberOptionLabel = "Forever";
            }

            return(new RememberOption
            {
                OptionLabel = rememberOptionLabel,
                Value = expirationValue
            });
        }
コード例 #3
0
        public HttpResponseMessage Put(int id, RememberOptionModel model)
        {
            if (!ModelState.IsValid)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, ModelState.GetErrors()));
            }

            var rememberOption = config.RememberOptions.All.SingleOrDefault(x => x.ID == id);

            if (rememberOption == null)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound));
            }

            var query =
                (from a in this.config.Applications.All
                 from s in a.RememberOptions
                 where s.ID == id
                 select a);
            var app = query.Single();

            var updatedRememberOption = RememberOptionParser.Parse(model);

            if (app.RememberOptions.Any(x => x.Value == updatedRememberOption.Value && x.ID != id))
            {
                ModelState.AddModelError("", "A remember option with that value already exists");
                return(Request.CreateResponse(HttpStatusCode.BadRequest, ModelState.GetErrors()));
            }

            rememberOption.OptionLabel = updatedRememberOption.OptionLabel;
            rememberOption.Value       = updatedRememberOption.Value;

            config.SaveChanges();

            return(Request.CreateResponse(HttpStatusCode.NoContent));
        }