public object Put(UpdateTechnology request) { var tech = Db.SingleById <Technology>(request.Id); if (tech == null) { throw HttpError.NotFound("Tech not found"); } var session = SessionAs <AuthUserSession>(); if (tech.IsLocked && !(tech.OwnerId == session.UserAuthId || session.HasRole(RoleNames.Admin))) { throw HttpError.Unauthorized("This Technology is locked and can only be modified by its Owner or Admins."); } //Only Post an Update if there was no other update today var postUpdate = AppSettings.EnableTwitterUpdates() && tech.LastStatusUpdate.GetValueOrDefault(DateTime.MinValue) < DateTime.UtcNow.Date; tech.PopulateWith(request); tech.LastModifiedBy = session.UserName; tech.LastModified = DateTime.UtcNow; if (postUpdate) { tech.LastStatusUpdate = tech.LastModified; } Db.Save(tech); var history = tech.ConvertTo <TechnologyHistory>(); history.TechnologyId = tech.Id; history.Operation = "UPDATE"; Db.Insert(history); ContentCache.ClearAll(); var response = new UpdateTechnologyResponse { Result = tech }; if (postUpdate) { var url = new ClientTechnology { Slug = tech.Slug }.ToAbsoluteUri(); response.ResponseStatus = new ResponseStatus { Message = PostTwitterUpdate( "Who's using #{0}? {1}".Fmt(tech.Slug.Replace("-", ""), url), Db.ColumnDistinct <long>(Db.From <TechnologyChoice>() .Where(x => x.TechnologyId == tech.Id) .Select(x => x.TechnologyStackId)).ToList(), maxLength: 140 - (TweetUrlLength - url.Length)) }; } return(response); }
public object Put(UpdateTechnology request) { var tech = Db.SingleById <Technology>(request.Id); if (tech == null) { throw HttpError.NotFound("Tech not found"); } var session = SessionAs <AuthUserSession>(); var authRepo = HostContext.AppHost.GetAuthRepository(Request); using (authRepo as IDisposable) { if (tech.IsLocked && !(tech.OwnerId == session.UserAuthId || session.HasRole(RoleNames.Admin, authRepo))) { throw HttpError.Unauthorized( "This Technology is locked and can only be modified by its Owner or Admins."); } } //Only Post an Update if there was no other update today var postUpdate = AppSettings.EnableTwitterUpdates() && tech.LastStatusUpdate.GetValueOrDefault(DateTime.MinValue) < DateTime.UtcNow.Date; tech.PopulateWith(request); tech.LastModifiedBy = session.UserName; tech.LastModified = DateTime.UtcNow; if (postUpdate) { tech.LastStatusUpdate = tech.LastModified; } if (Request.Files.Length > 0) { tech.LogoUrl = Request.Files[0].UploadToImgur(AppSettings.GetString("oauth.imgur.ClientId"), nameof(tech.LogoUrl), minWidth: 100, minHeight: 50, maxWidth: 2000, maxHeight: 1000); } if (string.IsNullOrEmpty(tech.LogoUrl)) { throw new ArgumentException("Logo is Required", nameof(request.LogoUrl)); } Db.Save(tech); var history = tech.ConvertTo <TechnologyHistory>(); history.TechnologyId = tech.Id; history.Operation = "UPDATE"; Db.Insert(history); Cache.FlushAll(); var response = new UpdateTechnologyResponse { Result = tech }; if (postUpdate) { var url = TwitterUpdates.BaseUrl.CombineWith(new ClientTechnology { Slug = tech.Slug }.ToUrl()); var twitterSlug = tech.Slug.Replace("-", ""); response.ResponseStatus = new ResponseStatus { Message = PostTwitterUpdate( $"Who's using #{twitterSlug}? {url}", Db.ColumnDistinct <long>(Db.From <TechnologyChoice>() .Where(x => x.TechnologyId == tech.Id) .Select(x => x.TechnologyStackId)).ToList(), maxLength: 140 - (TweetUrlLength - url.Length)) }; } return(response); }