public HttpResult Post(CreateCrawler request) { var crawler = new Crawler().PopulateWith(request.SanitizeDtoHtml()); // Check for existing UserName if (Get(new FetchCrawlers { UserName = request.UserName }).Crawlers.Any()) throw new HttpError(HttpStatusCode.Conflict, new ArgumentException("UserName {0} already exists. ".Fmt(request.UserName))); // Check if division is open for joining var divisionResp = ResolveService<DivisionService>().Get(new FetchDivision { Id = request.DivisionId }); if (!divisionResp.Division.Joinable) throw new HttpError(HttpStatusCode.BadRequest, new ArgumentException("Division {0} is not joinable. ".Fmt(request.UserName))); // Validate .rc file for the server var serverResp = ResolveService<ServerService>().Get(new FetchServer { Id = request.ServerId }); if (!_validator.ValidateRcInit(new Uri(serverResp.Server.PlayerRcUrl(request.UserName)))) throw new HttpError(HttpStatusCode.Forbidden, new ArgumentException("UserName {0} does not have a valid .rc file. ".Fmt(request.UserName))); var newId = Db.Insert(crawler, selectIdentity: true); return new HttpResult(new CrawlerResponse {Crawler = Get(new FetchCrawler {Id = (int) newId}).Crawler}) { StatusCode = HttpStatusCode.Created, Headers = { {HttpHeaders.Location, Request.AbsoluteUri.CombineWith(newId)} } }; }
public HttpResult Put(UpdateCrawler request) { var crawler = new Crawler().PopulateWith(request.SanitizeDtoHtml()); int result = Db.UpdateNonDefaults(crawler, c => c.Id == crawler.Id); if (result == 0) throw new HttpError(HttpStatusCode.NotFound, new ArgumentException("Crawler {0} does not exist. ".Fmt(request.Id))); return new HttpResult { StatusCode = HttpStatusCode.NoContent }; }