Skip to content

Commit

Permalink
first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
shamsiddin808 committed Aug 17, 2024
0 parents commit d33cc3b
Show file tree
Hide file tree
Showing 147 changed files with 6,490 additions and 0 deletions.
78 changes: 78 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
<div align="center">
<img width="30%" src="https://user-images.githubusercontent.com/72341453/134747028-7e2d90cc-a92f-4f66-815e-54a0d50cca54.PNG">

# StudyBuddy
</div>

### Cloning the repository

--> Clone the repository using the command below :
```bash
git clone https://github.com/divanov11/StudyBud.git

```

--> Move into the directory where we have the project files :
```bash
cd StudyBud

```

--> Create a virtual environment :
```bash
# Let's install virtualenv first
pip install virtualenv

# Then we create our virtual environment
virtualenv envname

```

--> Activate the virtual environment :
```bash
envname\scripts\activate

```

--> Install the requirements :
```bash
pip install -r requirements.txt

```

#

### Running the App

--> To run the App, we use :
```bash
python manage.py runserver

```

> ⚠ Then, the development server will be started at http://127.0.0.1:8000/
#

### App Preview :

<table width="100%">
<tr>
<td width="50%">
&nbsp;
<br>
<p align="center">
Feed Home
</p>
<img src="https://user-images.githubusercontent.com/72341453/134747262-0a92233d-8010-40f8-84c5-8d94895aac44.PNG">
</td>
<td width="50%">
<br>
<p align="center">
Room Conversation Preview
</p>
<img src="https://user-images.githubusercontent.com/72341453/134747155-3ca5b55f-b064-4741-aeae-abe90bddf41e.PNG">
</td>
</table>


42 changes: 42 additions & 0 deletions apiexample.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<!DOCTYPE html>
<html>

<head>
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<title>Cool Rooms</title>
<meta name='viewport' content='width=device-width, initial-scale=1'>
</head>

<body>

<h1>Cools Rooms</h1>

<div id="rooms-container">

</div>

</body>

<script>
let roomsContainer = document.getElementById('rooms-container')

let getRooms = async () => {
let response = await fetch('http://127.0.0.1:8000/api/rooms/')
let rooms = await response.json()

for (let i = 0; rooms.length > i; i++) {
let room = rooms[i]

let row = `<div>
<h3>${room.name}</h3>
</div>`

roomsContainer.innerHTML += row
}
}

getRooms()
</script>

</html>
Empty file added base/__init__.py
Empty file.
Binary file added base/__pycache__/__init__.cpython-310.pyc
Binary file not shown.
Binary file added base/__pycache__/__init__.cpython-39.pyc
Binary file not shown.
Binary file added base/__pycache__/admin.cpython-310.pyc
Binary file not shown.
Binary file added base/__pycache__/admin.cpython-39.pyc
Binary file not shown.
Binary file added base/__pycache__/apps.cpython-310.pyc
Binary file not shown.
Binary file added base/__pycache__/apps.cpython-39.pyc
Binary file not shown.
Binary file added base/__pycache__/forms.cpython-310.pyc
Binary file not shown.
Binary file added base/__pycache__/forms.cpython-39.pyc
Binary file not shown.
Binary file added base/__pycache__/models.cpython-310.pyc
Binary file not shown.
Binary file added base/__pycache__/models.cpython-39.pyc
Binary file not shown.
Binary file added base/__pycache__/urls.cpython-310.pyc
Binary file not shown.
Binary file added base/__pycache__/urls.cpython-39.pyc
Binary file not shown.
Binary file added base/__pycache__/views.cpython-310.pyc
Binary file not shown.
Binary file added base/__pycache__/views.cpython-39.pyc
Binary file not shown.
10 changes: 10 additions & 0 deletions base/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.contrib import admin

# Register your models here.

from .models import Room, Topic, Message, User

admin.site.register(User)
admin.site.register(Room)
admin.site.register(Topic)
admin.site.register(Message)
Empty file added base/api/__init__.py
Empty file.
Binary file added base/api/__pycache__/__init__.cpython-310.pyc
Binary file not shown.
Binary file added base/api/__pycache__/__init__.cpython-39.pyc
Binary file not shown.
Binary file added base/api/__pycache__/serializers.cpython-310.pyc
Binary file not shown.
Binary file added base/api/__pycache__/serializers.cpython-39.pyc
Binary file not shown.
Binary file added base/api/__pycache__/urls.cpython-310.pyc
Binary file not shown.
Binary file added base/api/__pycache__/urls.cpython-39.pyc
Binary file not shown.
Binary file added base/api/__pycache__/views.cpython-310.pyc
Binary file not shown.
Binary file added base/api/__pycache__/views.cpython-39.pyc
Binary file not shown.
8 changes: 8 additions & 0 deletions base/api/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from rest_framework.serializers import ModelSerializer
from base.models import Room


class RoomSerializer(ModelSerializer):
class Meta:
model = Room
fields = '__all__'
8 changes: 8 additions & 0 deletions base/api/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from django.urls import path
from . import views

urlpatterns = [
path('', views.getRoutes),
path('rooms/', views.getRooms),
path('rooms/<str:pk>/', views.getRoom),
]
29 changes: 29 additions & 0 deletions base/api/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from rest_framework.decorators import api_view
from rest_framework.response import Response
from base.models import Room
from .serializers import RoomSerializer
from base.api import serializers


@api_view(['GET'])
def getRoutes(request):
routes = [
'GET /api',
'GET /api/rooms',
'GET /api/rooms/:id'
]
return Response(routes)


@api_view(['GET'])
def getRooms(request):
rooms = Room.objects.all()
serializer = RoomSerializer(rooms, many=True)
return Response(serializer.data)


@api_view(['GET'])
def getRoom(request, pk):
room = Room.objects.get(id=pk)
serializer = RoomSerializer(room, many=False)
return Response(serializer.data)
6 changes: 6 additions & 0 deletions base/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class BaseConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'base'
22 changes: 22 additions & 0 deletions base/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from django.forms import ModelForm
from django.contrib.auth.forms import UserCreationForm
from .models import Room, User


class MyUserCreationForm(UserCreationForm):
class Meta:
model = User
fields = ['name', 'username', 'email', 'password1', 'password2']


class RoomForm(ModelForm):
class Meta:
model = Room
fields = '__all__'
exclude = ['host', 'participants']


class UserForm(ModelForm):
class Meta:
model = User
fields = ['avatar', 'name', 'username', 'email', 'bio']
83 changes: 83 additions & 0 deletions base/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Generated by Django 3.2.7 on 2021-09-21 17:10

from django.conf import settings
import django.contrib.auth.models
import django.contrib.auth.validators
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone


class Migration(migrations.Migration):

initial = True

dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
]

operations = [
migrations.CreateModel(
name='User',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')),
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
],
options={
'verbose_name': 'user',
'verbose_name_plural': 'users',
'abstract': False,
},
managers=[
('objects', django.contrib.auth.models.UserManager()),
],
),
migrations.CreateModel(
name='Topic',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200)),
],
),
migrations.CreateModel(
name='Room',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200)),
('description', models.TextField(blank=True, null=True)),
('updated', models.DateTimeField(auto_now=True)),
('created', models.DateTimeField(auto_now_add=True)),
('host', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
('participants', models.ManyToManyField(blank=True, related_name='participants', to=settings.AUTH_USER_MODEL)),
('topic', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='base.topic')),
],
options={
'ordering': ['-updated', '-created'],
},
),
migrations.CreateModel(
name='Message',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('body', models.TextField()),
('updated', models.DateTimeField(auto_now=True)),
('created', models.DateTimeField(auto_now_add=True)),
('room', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='base.room')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'ordering': ['-updated', '-created'],
},
),
]
28 changes: 28 additions & 0 deletions base/migrations/0002_auto_20210921_1315.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Generated by Django 3.2.7 on 2021-09-21 17:15

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('base', '0001_initial'),
]

operations = [
migrations.AddField(
model_name='user',
name='bio',
field=models.TextField(null=True),
),
migrations.AddField(
model_name='user',
name='name',
field=models.CharField(max_length=200, null=True),
),
migrations.AlterField(
model_name='user',
name='email',
field=models.EmailField(max_length=254, null=True, unique=True),
),
]
18 changes: 18 additions & 0 deletions base/migrations/0003_user_avatar.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.2.7 on 2021-09-21 20:42

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('base', '0002_auto_20210921_1315'),
]

operations = [
migrations.AddField(
model_name='user',
name='avatar',
field=models.ImageField(default='avatar.svg', null=True, upload_to=''),
),
]
Empty file added base/migrations/__init__.py
Empty file.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added base/migrations/__pycache__/__init__.cpython-310.pyc
Binary file not shown.
Binary file added base/migrations/__pycache__/__init__.cpython-39.pyc
Binary file not shown.
51 changes: 51 additions & 0 deletions base/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
from django.db import models
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
name = models.CharField(max_length=200, null=True)
email = models.EmailField(unique=True, null=True)
bio = models.TextField(null=True)

avatar = models.ImageField(null=True, default="avatar.svg")

USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []


class Topic(models.Model):
name = models.CharField(max_length=200)

def __str__(self):
return self.name


class Room(models.Model):
host = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
topic = models.ForeignKey(Topic, on_delete=models.SET_NULL, null=True)
name = models.CharField(max_length=200)
description = models.TextField(null=True, blank=True)
participants = models.ManyToManyField(
User, related_name='participants', blank=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)

class Meta:
ordering = ['-updated', '-created']

def __str__(self):
return self.name


class Message(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
room = models.ForeignKey(Room, on_delete=models.CASCADE)
body = models.TextField()
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)

class Meta:
ordering = ['-updated', '-created']

def __str__(self):
return self.body[0:50]
Loading

0 comments on commit d33cc3b

Please sign in to comment.