Skip to content

Commit

Permalink
Merge pull request #85 from cuappdev/refactor
Browse files Browse the repository at this point in the history
Refactor
  • Loading branch information
tjvignos authored Mar 20, 2024
2 parents a8a5dc0 + 8b94b4e commit 4b6800c
Show file tree
Hide file tree
Showing 62 changed files with 306 additions and 248 deletions.
11 changes: 5 additions & 6 deletions .envrctemplate
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
export CORNELL_VENDOR_TOKEN=
export CORNELL_VENDOR_API_KEY=
export DJANGO_ALLOWED_HOSTS=
export IS_PROD=
export POSTGRES_NAME=
export POSTGRES_USER=
export POSTGRES_PASSWORD=
export POSTGRES_HOST=
export POSTGRES_PORT=
export VENDOR_API_KEY=
export VENDOR_BEARER_TOKEN=
export REPORT_KEY=
export DJANGO_SECRET_KEY=
export DJANGO_SECRET_KEY=

# Not used
export CORNELL_VENDOR_TOKEN=
export CORNELL_VENDOR_API_KEY=
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Security
.env
eatery-dev.pem
*.pem
.envrc
.envlocal
.envremote
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ COPY ./src .
COPY ./requirements.txt .
RUN pip install -r requirements.txt

COPY update_db.txt /etc/cron.d/update_db
RUN mv ./cron/update_db.txt /etc/cron.d/update_db
RUN chmod 0766 manage.py
RUN crontab /etc/cron.d/update_db
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,17 @@ This is the backend for eatery-blue-backend.
- Create the eatery database via `create database "eatery-dev";`
- Quit psql via `\q`
- Create an `.envrc` file and fill out the environment variables from the `.envrctemplate` file corresponding to your local postgres database
- To set up the tables and data, make sure current working directory is the `src` folder and run `bash reset_db.sh`
- To run the backend, run `bash start.sh`
- Create a python virtual environment in the root directory by running `python3 -m venv venv` and then activate it by running `source venv/bin/activate` (MacOS) or `venv\Scripts\activate` (Windows)
- Install the required dependencies by running `pip3 install -r requirements.txt`
- Load the environment variables by running `source .envrc`
- To set up the tables and data (or if reseting the database), make sure current working directory is the `src` folder and run `python3 manage.py makemigrations; python3 manage.py migrate; python3 manage.py populate_models`
- To run the backend, run `python3 manage.py runserver 0.0.0.0:8000` (Ensuring the env variables are loaded and all dependencies are installed)

## SP24 Members

- Thomas Vignos
- Aayush Agnihotri
- Daniel Weiner

## FA23 Members

Expand Down
2 changes: 1 addition & 1 deletion docker-compose.server.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ services:
env_file: .env
stdin_open: true # docker run -i
tty: true # docker run -t
command: sh -c "python manage.py migrate && printenv > /etc/environment && { cron -f & python manage.py runserver 0.0.0.0:8000; }"
command: sh -c "python manage.py migrate && printenv > /etc/environment && { cron start & python manage.py runserver 0.0.0.0:8000; }"
ports:
- "8000:8000"
restart: always
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ services:
env_file: .env
stdin_open: true # docker run -i
tty: true # docker run -t
command: sh -c "python manage.py migrate && printenv > /etc/environment && { cron -f & python manage.py runserver 0.0.0.0:80; }"
command: sh -c "python manage.py migrate && printenv > /etc/environment && { cron start & python manage.py runserver 0.0.0.0:80; }"
ports:
- "80:80"
restart: always
4 changes: 0 additions & 4 deletions src/alert/admin.py

This file was deleted.

6 changes: 0 additions & 6 deletions src/alert/apps.py

This file was deleted.

26 changes: 0 additions & 26 deletions src/alert/migrations/0001_initial.py

This file was deleted.

Empty file removed src/alert/migrations/__init__.py
Empty file.
14 changes: 0 additions & 14 deletions src/alert/models.py

This file was deleted.

13 changes: 0 additions & 13 deletions src/alert/permissions.py

This file was deleted.

8 changes: 0 additions & 8 deletions src/alert/serializers.py

This file was deleted.

9 changes: 0 additions & 9 deletions src/alert/views.py

This file was deleted.

18 changes: 18 additions & 0 deletions src/category/migrations/0002_alter_category_id.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.0 on 2024-02-29 17:25

from django.db import migrations, models


class Migration(migrations.Migration):

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

operations = [
migrations.AlterField(
model_name='category',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
]
5 changes: 3 additions & 2 deletions src/category/models.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from django.db import models
from eatery.models import Eatery
from event.models import Event


class Category(models.Model):
id = models.AutoField(primary_key=True)
event = models.ForeignKey(Event, related_name="menu", on_delete=models.DO_NOTHING)
category = models.CharField(max_length=40, default="General")

def __str__(self):
return self.category
8 changes: 4 additions & 4 deletions src/category/serializers.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from rest_framework import serializers
from category.models import Category
from item.serializers import ItemSerializer, ItemReadSerializer
from item.serializers import ItemSerializer, ItemSerializerOptimized


class CategorySerializer(serializers.ModelSerializer):
Expand All @@ -16,9 +16,9 @@ class Meta:
model = Category
fields = ["id", "category", "event", "items"]

class CategoryReadSerializer(serializers.ModelSerializer):
items = ItemReadSerializer(many=True, read_only=True)
class CategorySerializerOptimized(serializers.ModelSerializer):
items = ItemSerializerOptimized(many=True, read_only=True)

class Meta:
model = Category
fields = ["category", "items"]
fields = ["id", "category", "items"]
3 changes: 0 additions & 3 deletions src/category/tests.py

This file was deleted.

10 changes: 10 additions & 0 deletions src/category/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.urls import path, include
from category.views import CategoryViewSet
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register("", CategoryViewSet)

urlpatterns = [
path("", include(router.urls)),
]
8 changes: 6 additions & 2 deletions src/category/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
from django.shortcuts import render
from rest_framework import viewsets
from category.models import Category
from category.serializers import CategorySerializer

# Create your views here.
class CategoryViewSet(viewsets.ModelViewSet):
queryset = Category.objects.all()
serializer_class = CategorySerializer
File renamed without changes.
2 changes: 1 addition & 1 deletion update_db.txt → src/cron/update_db.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0 11-23 * * * cd /usr/app; /usr/local/bin/python /usr/app/manage.py populate_models > /usr/app/cron_log.txt 2>&1;
0 11-23 * * * cd /usr/app; /usr/local/bin/python /usr/app/manage.py populate_models > /usr/app/cron/cron_log.txt 2>&1;
4 changes: 2 additions & 2 deletions src/eatery/admin.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.contrib import admin
import eatery.models as models
from eatery.models import Eatery

admin.site.register(models.Eatery)
admin.site.register(Eatery)
18 changes: 18 additions & 0 deletions src/eatery/migrations/0002_alter_eatery_id.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.0 on 2024-02-29 21:44

from django.db import migrations, models


class Migration(migrations.Migration):

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

operations = [
migrations.AlterField(
model_name='eatery',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
]
18 changes: 18 additions & 0 deletions src/eatery/migrations/0003_alter_eatery_image_url.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.0 on 2024-03-06 23:11

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('eatery', '0002_alter_eatery_id'),
]

operations = [
migrations.AlterField(
model_name='eatery',
name='image_url',
field=models.URLField(blank=True, default='https://images-prod.healthline.com/hlcmsresource/images/AN_images/health-benefits-of-apples-1296x728-feature.jpg'),
),
]
18 changes: 18 additions & 0 deletions src/eatery/migrations/0004_alter_eatery_campus_area.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.0 on 2024-03-10 14:46

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('eatery', '0003_alter_eatery_image_url'),
]

operations = [
migrations.AlterField(
model_name='eatery',
name='campus_area',
field=models.CharField(blank=True, choices=[('West', 'West'), ('North', 'North'), ('Central', 'Central'), ('Collegetown', 'Collegetown'), ('East', 'East'), ('', 'None')], default='', max_length=15),
),
]
18 changes: 18 additions & 0 deletions src/eatery/migrations/0005_alter_eatery_campus_area.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.0 on 2024-03-10 15:31

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('eatery', '0004_alter_eatery_campus_area'),
]

operations = [
migrations.AlterField(
model_name='eatery',
name='campus_area',
field=models.CharField(blank=True, choices=[('West', 'West'), ('North', 'North'), ('Central', 'Central'), ('Collegetown', 'Collegetown'), ('', 'None')], default='', max_length=15),
),
]
8 changes: 5 additions & 3 deletions src/eatery/models.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.db import models
from django.db import connection

from util.constants import DEFAULT_IMAGE_URL

class Eatery(models.Model):
class CampusArea(models.TextChoices):
Expand All @@ -10,10 +10,9 @@ class CampusArea(models.TextChoices):
COLLEGETOWN = "Collegetown"
NONE = ""

id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=40)
menu_summary = models.TextField(blank=True, null=True, default="")
image_url = models.URLField(blank=True)
image_url = models.URLField(blank=True, default=DEFAULT_IMAGE_URL)
location = models.TextField(blank=True)
campus_area = models.CharField(
max_length=15, choices=CampusArea.choices, default=CampusArea.NONE, blank=True
Expand All @@ -24,3 +23,6 @@ class CampusArea(models.TextChoices):
payment_accepts_meal_swipes = models.BooleanField(null=True, blank=True)
payment_accepts_brbs = models.BooleanField(null=True, blank=True)
payment_accepts_cash = models.BooleanField(null=True, blank=True)

def __str__(self):
return self.name
20 changes: 4 additions & 16 deletions src/eatery/serializers.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from rest_framework import serializers
from eatery.models import Eatery
from event.models import Event
from event.serializers import EventSerializer, EventSerializerSimple, EventReadSerializer
from event.serializers import EventSerializer, EventSerializerSimple, EventSerializerOptimized
from datetime import timedelta, datetime
from zoneinfo import ZoneInfo

Expand Down Expand Up @@ -29,20 +29,8 @@ class Meta:
model = Eatery
fields = ['id', 'name', 'menu_summary', 'image_url', 'location', 'campus_area', 'online_order_url', 'latitude', 'longitude', 'payment_accepts_meal_swipes', 'payment_accepts_brbs', 'payment_accepts_cash', 'events']

class EateryReadSerializer(serializers.ModelSerializer):
id = serializers.IntegerField()
name = serializers.CharField()
menu_summary = serializers.CharField(allow_null=True,default="Cornell Eatery")
image_url = serializers.URLField(allow_null=True,default="https://images-prod.healthline.com/hlcmsresource/images/AN_images/health-benefits-of-apples-1296x728-feature.jpg")
location = serializers.CharField(allow_null=True)
campus_area = serializers.CharField(allow_null=True)
online_order_url = serializers.URLField(allow_null=True)
latitude = serializers.FloatField(allow_null=True)
longitude = serializers.FloatField(allow_null=True)
payment_accepts_meal_swipes = serializers.BooleanField(allow_null=True)
payment_accepts_brbs = serializers.BooleanField(allow_null=True)
payment_accepts_cash = serializers.BooleanField(allow_null=True)
events = EventReadSerializer(many=True, read_only=True)
class EaterySerializerOptimized(serializers.ModelSerializer):
events = EventSerializerOptimized(many=True, read_only=True)

class Meta:
model = Eatery
Expand Down Expand Up @@ -70,7 +58,7 @@ def get_events(self, obj):
day_unix = int(day.timestamp())
day_end_unix = int((day + timedelta(days=1)).timestamp())
events = Event.objects.filter(eatery=obj.id, start__gte=day_unix, start__lt=day_end_unix)
serializer = EventReadSerializer(instance=events, many=True)
serializer = EventSerializerOptimized(instance=events, many=True)
return serializer.data

class Meta:
Expand Down
Loading

0 comments on commit 4b6800c

Please sign in to comment.