Skip to content

Commit e65cf09

Browse files
author
Stanislawa Kutyepov
committed
[add]: ability to like books
1 parent 2ab2eae commit e65cf09

File tree

4 files changed

+58
-3
lines changed

4 files changed

+58
-3
lines changed

app/books/migrations/0004_like.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Generated by Django 3.2.6 on 2021-08-05 20:31
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12+
('books', '0003_book_posted_by'),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name='Like',
18+
fields=[
19+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20+
('book', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='likes', to='books.book')),
21+
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
22+
],
23+
),
24+
]

app/books/models.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,9 @@ class Book(models.Model):
88
description = models.TextField(blank=True)
99
url = models.URLField()
1010
created_at = models.DateTimeField(auto_now_add=True)
11-
posted_by = models.ForeignKey(get_user_model(), null=True, on_delete=models.CASCADE)
11+
posted_by = models.ForeignKey(get_user_model(), null=True, on_delete=models.CASCADE)
12+
13+
14+
class Like(models.Model):
15+
user = models.ForeignKey(get_user_model(), null=True, on_delete=models.CASCADE)
16+
book = models.ForeignKey('books.Book', related_name='likes', on_delete=models.CASCADE)

app/books/schema.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import graphene
22
from graphene_django import DjangoObjectType
3-
from .models import Book
3+
from .models import Book, Like
4+
from users.schema import UserType
45

56

67
class BookType(DjangoObjectType):
@@ -76,7 +77,32 @@ def mutate(self, info, book_id):
7677

7778
return DeleteBook(book_id=book_id)
7879

80+
class CreateLike(graphene.Mutation):
81+
user = graphene.Field(UserType)
82+
book = graphene.Field(BookType)
83+
84+
class Arguments:
85+
book_id = graphene.Int(required=True)
86+
87+
def mutate(self, info, book_id):
88+
user = info.context.user
89+
90+
if user.is_anonymous:
91+
raise Exception("Login first")
92+
93+
book = Book.objects.get(id=book_id)
94+
if not book:
95+
raise Exception('Cannot find a book with id {}'.format(book_id))
96+
97+
Like.objects.create(
98+
user=user,
99+
book=book
100+
)
101+
102+
return CreateLike(user=user, book=book)
103+
79104
class Mutation(graphene.ObjectType):
80105
create_book = CreateBook.Field()
81106
update_book = UpdateBook.Field()
82-
delete_book = DeleteBook.Field()
107+
delete_book = DeleteBook.Field()
108+
create_like = CreateLike.Field()

app/db.sqlite3

12 KB
Binary file not shown.

0 commit comments

Comments
 (0)