mirror of
https://github.com/ArthurDanjou/artdanj-api.git
synced 2026-01-27 18:10:27 +01:00
Reimport Posts likes
This commit is contained in:
74
app/Controllers/Http/PostsController.ts
Normal file
74
app/Controllers/Http/PostsController.ts
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
import Post from "App/Models/Post";
|
||||||
|
import {HttpContextContract} from "@ioc:Adonis/Core/HttpContext";
|
||||||
|
import Redis from "@ioc:Adonis/Addons/Redis";
|
||||||
|
|
||||||
|
export default class PostsController {
|
||||||
|
|
||||||
|
public async getLikes ({params}: HttpContextContract) {
|
||||||
|
let post = await Post.findBy('slug', params.slug)
|
||||||
|
|
||||||
|
if (!post) {
|
||||||
|
post = await Post.create({
|
||||||
|
slug: params.slug,
|
||||||
|
likes: 0
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return post.likes
|
||||||
|
}
|
||||||
|
|
||||||
|
public async unlike ({request, params}: HttpContextContract) {
|
||||||
|
const post = await Post.findByOrFail('slug', params.slug)
|
||||||
|
const ip = await request.ip()
|
||||||
|
|
||||||
|
const getLikes = post.likes - 1
|
||||||
|
const isLiked = await Redis.exists(`posts:${post.slug}/${ip}`)
|
||||||
|
|
||||||
|
if (isLiked) {
|
||||||
|
await Redis.del(`posts:${post.slug}/${ip}`)
|
||||||
|
await post.merge({
|
||||||
|
likes: getLikes
|
||||||
|
}).save()
|
||||||
|
return {
|
||||||
|
code: 200,
|
||||||
|
post
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async isLiked ({params, request}: HttpContextContract) {
|
||||||
|
const post = await Post.findBy('slug', params.slug)
|
||||||
|
if (post) {
|
||||||
|
const ip = request.ip()
|
||||||
|
return Redis.exists(`posts:${post.slug}/${ip}`);
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
public async like ({request, params}: HttpContextContract) {
|
||||||
|
let post = await Post.findBy('slug', params.slug)
|
||||||
|
const ip = await request.ip()
|
||||||
|
|
||||||
|
if (!post) {
|
||||||
|
post = await Post.create({
|
||||||
|
slug: params.slug,
|
||||||
|
likes: 0
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const getLikes = post.likes + 1
|
||||||
|
const isLiked = await Redis.exists(`posts:${post.slug}/${ip}`)
|
||||||
|
|
||||||
|
if (!isLiked) {
|
||||||
|
await Redis.set(`posts:${post.slug}/${ip}`, Date.now())
|
||||||
|
await post.merge({
|
||||||
|
likes: getLikes
|
||||||
|
}).save()
|
||||||
|
return {
|
||||||
|
code: 200,
|
||||||
|
post
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -71,3 +71,11 @@ Route.group(() => {
|
|||||||
Route.post('/api/login', 'AuthController.loginApi')
|
Route.post('/api/login', 'AuthController.loginApi')
|
||||||
Route.post('/api/logout', 'AuthController.logoutApi')
|
Route.post('/api/logout', 'AuthController.logoutApi')
|
||||||
}).prefix('auth')
|
}).prefix('auth')
|
||||||
|
|
||||||
|
// ArtSite
|
||||||
|
Route.group(() => {
|
||||||
|
Route.get('/:slug', 'PostsController.getLikes')
|
||||||
|
Route.get('/is/:slug', 'PostsController.isLiked')
|
||||||
|
Route.post('/:slug/like', 'PostsController.like')
|
||||||
|
Route.post('/:slug/unlike', 'PostsController.unlike')
|
||||||
|
}).prefix('posts')
|
||||||
|
|||||||
Reference in New Issue
Block a user