-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPostsController.cs
158 lines (142 loc) · 5.74 KB
/
PostsController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
using AutoMapper;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using PEP.Models.Domain;
using PEP.Models.DTO.Post;
using PEP.Repositories.Interface;
namespace PEP.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class PostsController : ControllerBase
{
private readonly IPostRepository impPostRepository;
private readonly IMapper mapper;
public PostsController(IPostRepository impPostRepository, IMapper mapper)
{
this.impPostRepository = impPostRepository;
this.mapper = mapper;
}
[HttpGet]
[Route("GetAllPostsListByProblemId")]
public async Task<IActionResult> GetAllPostsListByProblemId([FromQuery] bool isSolution, [FromQuery] int problemId, [FromQuery] int pageNumber, [FromQuery] int? pageSize)
{
var allPosts = await impPostRepository.GetPostsListByProblemIdAsync(isSolution, problemId, pageNumber, pageSize);
return Ok(mapper.Map<List<PostsOverviewDTO>>(allPosts));
}
[HttpPost]
[Route("AddPost")]
public async Task<IActionResult> AddPost([FromBody] PostAddDTO addPostDTO)
{
var post = mapper.Map<Post>(addPostDTO);
var result = await impPostRepository.AddPostAsync(post);
return Ok(mapper.Map<PostsOverviewDTO>(result));
}
[HttpPost]
[Route("AddComment")]
public async Task<IActionResult> AddComment([FromBody] PostCommentAddDTO addCommentDTO)
{
var comment = mapper.Map<Comment>(addCommentDTO);
var result = await impPostRepository.AddCommentAsync(comment);
return Ok(mapper.Map<PostCommentPreDTO>(result));
}
[HttpPost]
[Route("AddReply")]
public async Task<IActionResult> AddReply([FromBody] PostReplyAddDTO addReplyDTO)
{
var reply = mapper.Map<Reply>(addReplyDTO);
var result = await impPostRepository.AddReplyAsync(reply);
return Ok(mapper.Map<PostReplyPreDTO>(result));
}
[HttpPost]
[Route("AddUserLike")]
public async Task<IActionResult> AddUserLike([FromBody] PostLikeAddDTO postLikeAddDTO)
{
var userlike= mapper.Map<UserLike>(postLikeAddDTO);
var result = await impPostRepository.AddUserLikeAsync(userlike);
return Ok(mapper.Map<PostLikeAddDTO>(result));
}
[HttpGet]
[Route("GetPostById/{postId:int}")]
public async Task<IActionResult> GetPostById([FromRoute] int postId)
{
var post = await impPostRepository.GetPostByIdAsync(postId);
if (post == null)
{
return NotFound();
}
return Ok(mapper.Map<PostsOverviewDTO>(post));
}
[HttpGet]
[Route("GetCommentsByPostId")]
public async Task<IActionResult> GetCommentsByPostId([FromQuery] int postId, [FromQuery]int pageNumber, [FromQuery] int? pageSize)
{
var comments = await impPostRepository.GetCommentsByPostIdAsync(postId,pageNumber,pageSize);
if (comments == null)
{
return NotFound();
}
var result = mapper.Map<List<PostCommentPreDTO>>(comments);
return Ok(result);
}
[HttpDelete]
[Route("DeletePostById/{postId:int}")]
public async Task<IActionResult> DeletePostById([FromRoute] int postId)
{
var post = await impPostRepository.DeletePostByIdAsync(postId);
if (post == null)
{
return NotFound();
}
return Ok(mapper.Map<PostsOverviewDTO>(post));
}
[HttpDelete]
[Route("DeleteCommentById/{commentId:int}")]
public async Task<IActionResult> DeleteCommentById([FromRoute] int commentId)
{
var comment = await impPostRepository.DeleteCommentByIdAsync(commentId);
if (comment == null)
{
return NotFound();
}
return Ok(mapper.Map<PostCommentPreDTO>(comment));
}
[HttpDelete]
[Route("DeleteReplyById/{replyId:int}")]
public async Task<IActionResult> DeleteReplyById([FromRoute] int replyId)
{
var reply = await impPostRepository.DeleteReplyByIdAsync(replyId);
if (reply == null)
{
return NotFound();
}
return Ok(mapper.Map<PostReplyPreDTO>(reply));
}
[HttpDelete]
[Route("DeleteUserLike")]
public async Task<IActionResult> DeleteUserLike([FromQuery] int userId, [FromQuery] int postId)
{
var userlike = await impPostRepository.DeleteUserLikeAsync(userId, postId);
return Ok(mapper.Map<PostLikeAddDTO>(userlike));
}
[HttpPut]
[Route("UpdatePost/{postId:int}")]
public async Task<IActionResult> UpdatePost([FromRoute] int postId, [FromBody] PostUpdateDTO updatePostDTO)
{
var post = mapper.Map<Post>(updatePostDTO);
var result = await impPostRepository.UpdatePostAsync(postId, post);
if (result == null)
{
return NotFound();
}
return Ok(mapper.Map<PostsOverviewDTO>(result));
}
[HttpGet]
[Route("GetPostsListByUserId")]
public async Task<IActionResult> GetPostsListByUserId([FromQuery] int userId, [FromQuery] int pageNumber, [FromQuery] int? pageSize, [FromQuery] bool isSolution)
{
var allPosts = await impPostRepository.GetPostsListByUserIdAsync(userId, pageNumber, pageSize, isSolution);
return Ok(mapper.Map<List<PostsOverviewDTO>>(allPosts));
}
}
}