Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions app/api/admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from django.contrib import admin
from api.models import UserProfile, Followers

# Register your models here.
from .models import Users

admin.site.register(Users)
admin.site.register(UserProfile)
admin.site.register(Followers)
5 changes: 5 additions & 0 deletions app/api/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class ApiConfig(AppConfig):
name = 'api'
80 changes: 25 additions & 55 deletions app/api/models.py
Original file line number Diff line number Diff line change
@@ -1,75 +1,45 @@
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.conf import settings

# Create your models here.
class Users(models.Model):
username = models.CharField(max_length=100)
password = models.CharField(max_length=100)
email = models.CharField(max_length=100, unique=True)

class UserProfile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE,related_name="profile")
birthday = models.DateField(auto_now=False, auto_now_add=False, null=True)
company = models.CharField(max_length=50, null=True)
location = models.CharField(max_length=50, null=True)
created_at = models.DateField(auto_now=True)
updated_at = models.DateField(auto_now=True)

def __str__(self):
return '{} {} {} {} {}'.format(self.username, self.email, self.birthday, self.company, self.location)
return '{} {} {} {} {} {}'.format(self.id,self.user.username, self.user.email, self.birthday, self.company, self.location)


@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)


# @receiver(post_save, sender=User)
# def save_user_profile(sender, instance, **kwargs):
# instance.profile.save()

# from passlib.hash import pbkdf2_sha256
# hash = pbkdf2_sha256.encrypt("password", rounds=8000, salt_size=10)
# hash = $pbkdf2-sha256$8000$HaPUeu99L4VQKg$TmNh1N7/aQkkfVE1902sHc0uBHzwuVEUrMW3q5oiZwg
# u = Users(username="user1", password=hash,email="user1@test.com",birthday="1991-04-17",company="company1",location="location1")
# u.save()
# u = Users(username="user2", password=hash,email="user2@test.com",birthday="1989-04-17",company="company2",location="location2")
# u.save()
# u = Users(username="user3", password=hash,email="user3@test.com",birthday="1995-04-17",company="company3",location="location1")
# u.save()
# u = Users(username="user4", password=hash,email="user4@test.com",birthday="1987-04-17",company="company2",location="location1")
# u.save()
# u = Users(username="user5", password=hash,email="user5@test.com",birthday="1999-04-17",company="company2",location="location2")
# u.save()
# u = Users(username="user6", password=hash,email="user6@test.com",birthday="1994-04-17",company="company1",location="location2")
# u.save()

class Followers(models.Model):
user_id = models.ForeignKey(Users, on_delete=models.CASCADE, related_name='followers_user_followed') # User who is followed
followed_by_id = models.ForeignKey(Users, on_delete=models.CASCADE, related_name='followers_follower') # User one who following
user_id = models.ForeignKey(User, on_delete=models.CASCADE,
related_name='followers_user_followed') # User who is followed
followed_by_id = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,
related_name='followers_follower') # User one who following
followed_at = models.DateField(auto_now_add=True)

class Meta:
unique_together = ('user_id', 'followed_by_id')

def __str__(self):
return '{} {} {} {}'.format(self.id, self.user_id.id, self.followed_by_id.id, self.followed_at)

# user = Users.objects.get(id=1)
# follower = Users.objects.get(id=2)
# f = Followers(user_id=user, followed_by_id=follower)
# f.save()
# user = Users.objects.get(id=1)
# follower = Users.objects.get(id=3)
# f = Followers(user_id=user, followed_by_id=follower)
# f.save()
# user = Users.objects.get(id=1)
# follower = Users.objects.get(id=4)
# f = Followers(user_id=user, followed_by_id=follower)
# f.save()
# user = Users.objects.get(id=1)
# follower = Users.objects.get(id=5)
# f = Followers(user_id=user, followed_by_id=follower)
# f.save()
# user = Users.objects.get(id=1)
# follower = Users.objects.get(id=6)
# f = Followers(user_id=user, followed_by_id=follower)
# f.save()
# user = Users.objects.get(id=2)
# follower = Users.objects.get(id=1)
# f = Followers(user_id=user, followed_by_id=follower)
# f.save()
# user = Users.objects.get(id=2)
# follower = Users.objects.get(id=3)
# f = Followers(user_id=user, followed_by_id=follower)
# f.save()

return '{} {} {} {}'.format(self.id, self.user_id.id, self.followed_by_id, self.followed_at)



Expand Down
143 changes: 143 additions & 0 deletions app/api/schema.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
import graphene
from django.contrib.auth import get_user_model
from graphene_django.types import DjangoObjectType
from .models import Followers, UserProfile


class UserType(DjangoObjectType):
class Meta:
model = get_user_model()


class ProfileType(DjangoObjectType):
class Meta:
model = UserProfile


class FollowerType(DjangoObjectType):
class Meta:
model = Followers


class CreateUser(graphene.Mutation):
user = graphene.Field(UserType)

class Arguments:
username = graphene.String(required=True)
password = graphene.String(required=True)
email = graphene.String(required=True)

def mutate(self, info, username, password, email):
user = get_user_model()(
username=username,
email=email,
)
user.set_password(password)
user.save()
return CreateUser(user=user)


class CreateFollower(graphene.Mutation):
id = graphene.Int()
user_id = graphene.Field(UserType)
followed_by_id = graphene.Field(UserType)
followed_at = graphene.DateTime()

class Arguments:
user_id = graphene.Int(required=True)

def mutate(self, info, user_id):
user = info.context.user or None

follower = Followers(
user_id_id=user_id,
followed_by_id=user
)

follower.save()

return CreateFollower(
id=follower.id,
user_id=follower.user_id,
followed_by_id=follower.followed_by_id,
followed_at=follower.followed_at
)


class EditProfile(graphene.Mutation):
location = graphene.String()
company = graphene.String()
birthday = graphene.Date()
profile = graphene.Field(ProfileType)

class Arguments:
location = graphene.String(required=True)
company = graphene.String(required=True)
birthday = graphene.Date(required=False)

def mutate(self, info, location, company, birthday):
user = info.context.user or None
print(user, user.id)
print(UserProfile.objects.all())
profile = UserProfile.objects.get(user_id=user.id)
profile.company = company
profile.location = location
profile.birthday = birthday

profile.save()

return EditProfile(
company = profile.company,
location = profile.location,
birthday = profile.birthday
)


class DeleteFollower(graphene.Mutation):
ok = graphene.Boolean()

class Arguments:
id = graphene.Int(required=True)

def mutate(self, info, id):
follower = Followers.objects.get(pk=id)
follower.delete()
return DeleteFollower(
ok=True
)


class Mutation(graphene.ObjectType):
create_user = CreateUser.Field()
create_follower = CreateFollower.Field()
edit_profile = EditProfile.Field()
delete_follower = DeleteFollower.Field()


class Query(object):
user = graphene.Field(UserType, id=graphene.Int(), name=graphene.String())
all_users = graphene.List(UserType)
follower = graphene.Field(FollowerType, user_id=graphene.Int())
all_followers = graphene.List(FollowerType)
all_following = graphene.List(FollowerType)
all_profiles = graphene.List(ProfileType)

def resolve_all_users(self, info, **kwargs):
return get_user_model().objects.all()

def resolve_all_profiles(self,info, **kwargs):
return UserProfile.objects.all()

def resolve_all_following(self,info, **kwargs):
return Followers.objects.filter(followed_by_id=info.context.user.id)

def resolve_all_followers(self,info,**kwargs):
return Followers.objects.filter(user_id=info.context.user.id)

def resolve_user(self,info, **kwargs):
user = info.context.user

if user.is_anonymous:
raise Exception('Not logged in!')

return user
34 changes: 0 additions & 34 deletions app/api/serializers.py

This file was deleted.

Loading