mirror of https://github.com/abpframework/abp
parent
289a2c73cb
commit
284d40f7ae
@ -0,0 +1,10 @@
|
||||
using System.Threading.Tasks;
|
||||
using Volo.Abp.Application.Services;
|
||||
using Volo.Blogging.Posts;
|
||||
|
||||
namespace Volo.Blogging.Members;
|
||||
|
||||
public interface IMemberAppService : IApplicationService
|
||||
{
|
||||
Task<BlogUserDto> FindAsync(string username);
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Volo.Abp.Domain.Repositories;
|
||||
using Volo.Blogging.Posts;
|
||||
using Volo.Blogging.Users;
|
||||
|
||||
namespace Volo.Blogging.Members;
|
||||
|
||||
public class MemberAppService : BloggingAppServiceBase, IMemberAppService
|
||||
{
|
||||
private readonly IRepository<BlogUser, Guid> _userRepository;
|
||||
|
||||
public MemberAppService(IRepository<BlogUser, Guid> userRepository)
|
||||
{
|
||||
_userRepository = userRepository;
|
||||
}
|
||||
|
||||
public async Task<BlogUserDto> FindAsync(string username)
|
||||
{
|
||||
var user = await _userRepository.FindAsync(x => x.UserName == username);
|
||||
|
||||
return ObjectMapper.Map<BlogUser, BlogUserDto>(user);
|
||||
}
|
||||
}
|
@ -0,0 +1,86 @@
|
||||
@page
|
||||
@using System.Text
|
||||
@using Microsoft.Extensions.Localization
|
||||
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Alert
|
||||
@using Volo.Abp.Users
|
||||
@using Volo.Blogging.Localization
|
||||
@model Volo.Blogging.Pages.Members.IndexModel
|
||||
@inject IStringLocalizer<BloggingResource> L
|
||||
@inject ICurrentUser CurrentUser
|
||||
|
||||
|
||||
|
||||
<main class="pt-4" id="MemberDetail">
|
||||
<div class="container">
|
||||
<div class="row gx-lg-5">
|
||||
<div class="col-md-4 mb-5 mb-md-0">
|
||||
<div class="card h-auto member-profile-info">
|
||||
<div class="card-body">
|
||||
@if (Model.User.UserName == CurrentUser.UserName)
|
||||
{
|
||||
<div class="d-inline-block position-relative">
|
||||
<img src="~/assets/noimg-user.jpeg" loading="lazy" data-src="https://localhost:44300/api/account/profile-picture-file/ + @Model.User.Id" class="profile-pic"/>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<img src="~/assets/noimg-user.jpeg" loading="lazy" data-src="https://localhost:44300/api/account/profile-picture-file/ + @Model.User.Id" class="profile-pic"/>
|
||||
}
|
||||
@if (Model.User.UserName != null)
|
||||
{
|
||||
<h2 class="m-0">@Model.User.UserName</h2>
|
||||
}
|
||||
|
||||
<small class="d-block">@L["UserName"].Value.ToUpper()</small>
|
||||
<h5>@Model.User.UserName</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<abp-tabs>
|
||||
<abp-tab name="all-posts" title="All @L["Blogs"].Value">
|
||||
<div class="mt-4 pt-3">
|
||||
@foreach (var post in Model.Posts)
|
||||
{
|
||||
<div class="post-item">
|
||||
<div class="post-type-cont">
|
||||
|
||||
<a href="/members/@Model.User.UserName" class="text-decoration-none">
|
||||
<img src="~/assets/noimg-user.jpeg" data-src="https://localhost:44300/api/account/profile-picture-file/@Model.User.Id" class="post-member-img rounded-circle d-block">
|
||||
</a>
|
||||
</div>
|
||||
<div class="post-detail-cont">
|
||||
<div class="post-info fs-12 mb-2">
|
||||
<a href="/members/@Model.User.UserName" class="text-decoration-none">
|
||||
<span class="text-dark dot">@Model.User.UserName</span>
|
||||
</a>
|
||||
<span class="text-dark-200 dot">@post.CreationTime.ToString("MMMM yyyy")</span>
|
||||
<span class="text-dark-200">@post.ReadCount.ToString() @L["Views"]</span>
|
||||
</div>
|
||||
|
||||
<h3 class="post-title mb-3">
|
||||
@if ((post.Title).Any())
|
||||
{
|
||||
@foreach (var highlight in post.Title)
|
||||
{
|
||||
@Html.Raw(highlight)
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@post.Title
|
||||
}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="post-img-cont">
|
||||
<img src="~/assets/noimg.png" data-src="@post.CoverImage" class="" loading="lazy"/>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</abp-tab>
|
||||
</abp-tabs>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
@ -0,0 +1,43 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
|
||||
using Volo.Blogging.Members;
|
||||
using Volo.Blogging.Posts;
|
||||
|
||||
namespace Volo.Blogging.Pages.Members;
|
||||
|
||||
public class IndexModel : AbpPageModel
|
||||
{
|
||||
private readonly IPostAppService _postAppService;
|
||||
|
||||
private readonly IMemberAppService _memberAppService;
|
||||
public BlogUserDto User { get; set; }
|
||||
public List<PostWithDetailsDto> Posts { get; set; }
|
||||
|
||||
public IndexModel(IPostAppService postAppService, IMemberAppService memberAppService)
|
||||
{
|
||||
_postAppService = postAppService;
|
||||
_memberAppService = memberAppService;
|
||||
}
|
||||
|
||||
public async Task<IActionResult> OnGetAsync(string userName)
|
||||
{
|
||||
User = await _memberAppService.FindAsync(userName);
|
||||
|
||||
if (User is null)
|
||||
{
|
||||
return Redirect("/abp");
|
||||
}
|
||||
|
||||
Posts = await _postAppService.GetListByUserIdAsync(User.Id);
|
||||
|
||||
return Page();
|
||||
}
|
||||
|
||||
public async Task<IActionResult> OnPostAsync()
|
||||
{
|
||||
return Redirect($"/members/{CurrentUser.UserName}");
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue