public Result <GetProjectsSettings> GetProjectsSettings() { using var session = _apiDatabase.SessionFactory().OpenSession(); using var transaction = session.BeginTransaction(IsolationLevel.ReadCommitted); var settings = session .Query <ProjectsSettingsRecord>() .SingleOrDefault(); if (settings == null) { return(Result <GetProjectsSettings> .Failure("Unable to retrieve the projects settings.")); } var displayOrder = session .Query <ProjectRecord>() .Where(x => settings.DisplayOrder.Contains(x.Reference)) .ToList(); transaction.Commit(); return(Result <GetProjectsSettings> .Of(new GetProjectsSettings { DisplayOrder = displayOrder .OrderBy(x => settings.DisplayOrder.IndexOf(x.Reference)) .Select(x => new GetProjectsSettings.ProjectDisplayOrder { Reference = x.Reference, Title = x.Title }) .ToList() })); }
public Result <SearchBlogResponse> SearchBlog(int page) { const int pageSize = 6; using var session = _apiDatabase.SessionFactory().OpenSession(); using var transaction = session.BeginTransaction(IsolationLevel.ReadCommitted); var query = session .Query <BlogPostRecord>() .ToFuture(); var total = query.Count(); var posts = query .OrderByDescending(x => x.PostedAt) .Skip((page - 1) * pageSize) .Take(pageSize) .ToList(); transaction.Commit(); return(Result <SearchBlogResponse> .Of(new SearchBlogResponse { Total = total, PageSize = pageSize, Posts = posts.ConvertAll(x => new SearchBlogResponse.Post { Reference = x.Reference, Title = x.Title, UrlSlug = x.UrlSlug, PostedAt = x.PostedAt, Summary = x.Summary, Content = x.Content }) })); }
public Result <GetUserByResponse> GetUserByReference(Guid reference) { using var session = _apiDatabase.SessionFactory().OpenSession(); using var transaction = session.BeginTransaction(IsolationLevel.ReadCommitted); var user = session .Query <UserRecord>() .SingleOrDefault(x => x.Reference == reference); if (user == null) { return(Result <GetUserByResponse> .Failure($"Unable to find user with the given reference: {reference}.")); } transaction.Commit(); return(Result <GetUserByResponse> .Of(new GetUserByResponse { Reference = user.Reference, Username = user.Username, CreatedAt = user.CreatedAt, Type = user.Type })); }
public Result <LogInResponse> LogIn(LogInRequest request) { using var session = _apiDatabase.SessionFactory().OpenSession(); using var transaction = session.BeginTransaction(IsolationLevel.ReadCommitted); var user = session .Query <UserRecord>() .SingleOrDefault(x => x.Username.ToLower() == request.Username.ToLower()); if (user == null) { return(Result <LogInResponse> .Failure($"Unable to log in, the given user could not be found with username: {request.Username}.")); } var isPasswordValid = _passwordService.VerifyPassword(request.Password, user.Password, user.PasswordSalt); if (!isPasswordValid) { return(Result <LogInResponse> .Failure("Unable to log in, the given credentials we incorrect.")); } var expiresAt = DateTimeOffset.UtcNow.AddDays(1).ToUnixTimeSeconds(); var jwtResult = _jwtService.Create(new RequestContext { UserReference = user.Reference, UserType = user.Type }, expiresAt); if (jwtResult.IsFailure) { return(Result <LogInResponse> .From(jwtResult)); } return(Result <LogInResponse> .Of(new LogInResponse { Jwt = jwtResult.Value, ExpiresAt = expiresAt, User = new LogInResponse.UserDetails { Reference = user.Reference, Type = user.Type } })); }
public Result <SearchProjectsResponse> SearchProjects(int page) { const int pageSize = 6; using var session = _apiDatabase.SessionFactory().OpenSession(); using var transaction = session.BeginTransaction(IsolationLevel.ReadCommitted); var query = session .Query <ProjectRecord>() .ToFuture(); var total = query.Count(); var tagFrequencies = query .SelectMany(x => x.Tags) .GroupBy(x => x.ToLower()) .Select(x => new SearchProjectsResponse.TagFrequency { Tag = x.First(), Frequency = x.Count() }) .OrderByDescending(x => x.Frequency) .ThenBy(x => x.Tag) .ToList(); var settings = session .Query <ProjectsSettingsRecord>() .SingleOrDefault(); if (settings == null) { return(Result <SearchProjectsResponse> .Failure("Unable to retrieve the projects settings.")); } var projects = query .OrderBy(x => settings.DisplayOrder.IndexOf(x.Reference)) .Skip((page - 1) * pageSize) .Take(pageSize) .ToList(); transaction.Commit(); return(Result <SearchProjectsResponse> .Of(new SearchProjectsResponse { Total = total, PageSize = pageSize, Projects = projects.ConvertAll(x => new SearchProjectsResponse.Project { Reference = x.Reference, Title = x.Title, UrlSlug = x.UrlSlug, StartedAt = x.StartedAt, Summary = x.Summary, SourceCodeUrl = x.SourceCodeUrl, PreviewImageUrl = x.PreviewImageUrl, DisplayOrder = x.DisplayOrder, CreatedAt = x.CreatedAt, ViewUrl = x.ViewUrl, Tags = x.Tags.OrderBy(t => t).ToList() }), TagFrequencies = tagFrequencies })); }