public async Task <IActionResult> Create([FromBody] AccountCreateRequest request) { if (!ModelState.IsValid) { return(new StatusCodeResult((int)HttpStatusCode.BadRequest)); } try { //check if account already exists var userName = request.Email.Substring(0, request.Email.IndexOf("@", StringComparison.Ordinal)); var accountExists = _accountRepository .GetByUserName(userName) != null; if (!accountExists) { //generate a new api key var apiKey = "ARNIS-" + Guid.NewGuid().ToString().ToUpper().Substring(0, 4); //create client account var account = new Account { UserName = userName, Email = request.Email, ApiKey = apiKey }; await _accountRepository.Create(account); //create default workspace var workspace = new Workspace { AccountId = account.Id, Name = "default", Description = "Default workspace", Owners = new List <string> { account.UserName }, Solutions = new List <Solution>() }; await _workspaceRepository.Create(workspace); string baseUri = "http://arnis.azurewebsites.net"; string accountLocation = $"{baseUri}/{account.UserName.ToLower()}"; string workspaceLocation = $"{baseUri}/{account.UserName.ToLower()}/{workspace.Name.ToLower()}"; HttpContext.Response.StatusCode = (int)HttpStatusCode.OK; HttpContext.Response.Headers.Add("Location", accountLocation); var responseDto = new { userName = request.UserName, email = request.Email, apiKey, accountUri = accountLocation, workspaceUri = workspaceLocation }; return(new OkObjectResult(responseDto)); } else { HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest; return(new ObjectResult(new { errorMessage = "Username already exists." })); } } catch (Exception ex) { HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; return(new ObjectResult(new { errorMessage = ex.Message, errorDetails = ex.ToString() })); } }
public IActionResult Create([FromBody] WorkspaceCreateRequest workspaceDto) { if (!ModelState.IsValid) { return(new StatusCodeResult((int)HttpStatusCode.BadRequest)); } try { //validate api key var account = _accountRepository .GetByApiKey(workspaceDto.ApiKey); if (null != account) { //find the workspace var workspace = _workspaceRepository.GetByName(account.Id, workspaceDto.Name); //create new workspace if (null == workspace) { workspace = new Workspace { AccountId = account.Id, Name = workspaceDto.Name, Description = workspaceDto.Description, Owners = workspaceDto.Owners, Solutions = workspaceDto.Solutions, Logs = workspaceDto.Logs }; _workspaceRepository.Create(workspace); } //update existing workspace else { workspace.Solutions = workspaceDto.Solutions; workspace.Logs = workspace.Logs; workspace.DateUpdated = DateTime.UtcNow; _workspaceRepository.Update(workspace); } //process workspace statistics string baseUri = "http://arnis.azurewebsites.net"; string workspaceLocation = $"{baseUri}/{account.UserName.ToLower()}/{workspace.Name.ToLower()}"; HttpContext.Response.StatusCode = (int)HttpStatusCode.OK; HttpContext.Response.Headers.Add("Location", workspaceLocation); var responseDto = new { workspace = workspace.Name, workspaceUri = workspaceLocation }; return(new OkObjectResult(responseDto)); } else { HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized; } } catch (Exception ex) { HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; return(new ObjectResult(new { errorMessage = ex.Message, errorDetails = ex.ToString() })); } return(new StatusCodeResult((int)HttpStatusCode.BadRequest)); }