refactor: reorganize folder structure for improved maintainability and readability
This commit is contained in:
parent
259dccef20
commit
59d5b842b6
38 changed files with 25 additions and 51 deletions
|
|
@ -1,6 +1,6 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class AuthConfig(AppConfig):
|
||||
class AuthAppConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'auth'
|
||||
name = 'auth_app'
|
||||
|
|
@ -2,7 +2,7 @@ from django.urls import reverse
|
|||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
from rest_framework.authtoken.models import Token
|
||||
from users.models import CustomUser
|
||||
from user_app.models import CustomUser
|
||||
|
||||
class AuthTests(APITestCase):
|
||||
"""
|
||||
|
|
@ -6,11 +6,11 @@ from rest_framework.authtoken.models import Token
|
|||
from rest_framework.authtoken.views import ObtainAuthToken
|
||||
from django.contrib.auth import authenticate
|
||||
from .serializer import LoginSerializer
|
||||
from users.serializer import UserSerializer
|
||||
from user_app.serializer import UserSerializer
|
||||
from django.utils.html import strip_tags
|
||||
from django.core.mail import EmailMultiAlternatives
|
||||
from django.template.loader import render_to_string
|
||||
from users.models import CustomUser
|
||||
from user_app.models import CustomUser
|
||||
from django.db.models import Q
|
||||
|
||||
class LoginView(APIView):
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class UsersConfig(AppConfig):
|
||||
class UserAppConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'users'
|
||||
name = 'user_app'
|
||||
|
|
@ -2,7 +2,7 @@ import string
|
|||
import secrets
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.db import models
|
||||
from content.models import Video
|
||||
from video_app.models import Video
|
||||
|
||||
class CustomUser(AbstractUser):
|
||||
verify_email_token = models.CharField(max_length=20, blank=True, null=True)
|
||||
|
|
@ -1,5 +1,3 @@
|
|||
from django.http import JsonResponse
|
||||
from django.shortcuts import render
|
||||
from rest_framework.decorators import api_view, permission_classes
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class ContentConfig(AppConfig):
|
||||
class VideoAppConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'content'
|
||||
name = 'video_app'
|
||||
|
||||
def ready(self):
|
||||
from . import signals
|
||||
|
|
@ -3,6 +3,7 @@ from django.conf import settings
|
|||
from datetime import date
|
||||
from .class_assets import FILM_GENRES
|
||||
import os
|
||||
|
||||
class Video(models.Model):
|
||||
creator = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,default=1)
|
||||
created_at = models.DateField(default=date.today)
|
||||
|
|
@ -1,8 +1,6 @@
|
|||
from django.test import TestCase
|
||||
from unittest.mock import patch, MagicMock
|
||||
from .tasks import convert_video_to_hls, delete_original_video
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
|
||||
|
||||
class VideoTasksTest(TestCase):
|
||||
@patch('subprocess.run')
|
||||
|
|
@ -1,4 +1,3 @@
|
|||
from django.shortcuts import render
|
||||
from rest_framework.decorators import api_view, permission_classes
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
|
|
@ -7,7 +6,6 @@ from .models import Video
|
|||
from django.core.cache.backends.base import DEFAULT_TIMEOUT
|
||||
from django.views.decorators.cache import cache_page
|
||||
from django.conf import settings
|
||||
from django.http import FileResponse, Http404
|
||||
from rest_framework.parsers import MultiPartParser, FormParser
|
||||
from django.http import JsonResponse
|
||||
import os
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
"""Django's command-line utility for administrative tasks."""
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
def main():
|
||||
"""Run administrative tasks."""
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'videoflix.settings')
|
||||
try:
|
||||
from django.core.management import execute_from_command_line
|
||||
except ImportError as exc:
|
||||
raise ImportError(
|
||||
"Couldn't import Django. Are you sure it's installed and "
|
||||
"available on your PYTHONPATH environment variable? Did you "
|
||||
"forget to activate a virtual environment?"
|
||||
) from exc
|
||||
execute_from_command_line(sys.argv)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
@ -68,8 +68,8 @@ INSTALLED_APPS = [
|
|||
'debug_toolbar',
|
||||
'django_rq',
|
||||
'import_export',
|
||||
'content.apps.ContentConfig',
|
||||
'users',
|
||||
'user_app',
|
||||
'video_app.apps.VideoAppConfig',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
|
@ -203,7 +203,8 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
|||
# Auth
|
||||
|
||||
AUTH_EMAIL_VERIFICATION = True
|
||||
AUTH_USER_MODEL = 'users.CustomUser'
|
||||
|
||||
AUTH_USER_MODEL = 'user_app.CustomUser'
|
||||
|
||||
# Rest Framework
|
||||
|
||||
|
|
@ -214,7 +215,7 @@ REST_FRAMEWORK = {
|
|||
}
|
||||
|
||||
AUTHENTICATION_BACKENDS = (
|
||||
'auth.custom_backend.EmailBackend',
|
||||
'auth_app.custom_backend.EmailBackend',
|
||||
'django.contrib.auth.backends.ModelBackend',
|
||||
)
|
||||
|
||||
|
|
@ -18,8 +18,8 @@ from django.contrib import admin
|
|||
from django.urls import path, include
|
||||
from django.conf import settings
|
||||
from django.conf.urls.static import static
|
||||
from users import views as user_views
|
||||
from auth.views import (
|
||||
from user_app import views as user_views
|
||||
from auth_app.views import (
|
||||
LoginView,
|
||||
RegisterView,
|
||||
VerifyEmailView,
|
||||
|
|
@ -27,7 +27,7 @@ from auth.views import (
|
|||
ForgotPasswordView,
|
||||
ChangePasswordView
|
||||
)
|
||||
from content import views as content_views
|
||||
from video_app import views as video_views
|
||||
from debug_toolbar.toolbar import debug_toolbar_urls
|
||||
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
|
||||
|
||||
|
|
@ -36,9 +36,9 @@ urlpatterns = [
|
|||
path('django-rq/', include('django_rq.urls')),
|
||||
|
||||
# Content URLs
|
||||
path('content/', content_views.video_list, name='video_list'),
|
||||
path('content/upload/', content_views.video_upload, name='video_upload'),
|
||||
path('content/movie/<int:id>/', content_views.check_video_resolutions, name='check_video_resolutions'),
|
||||
path('video/', video_views.video_list, name='video_list'),
|
||||
path('video/upload/', video_views.video_upload, name='video_upload'),
|
||||
path('video/movie/<int:id>/', video_views.check_video_resolutions, name='check_video_resolutions'),
|
||||
|
||||
# Users URLs
|
||||
path('users/', user_views.user_list, name='user_list'),
|
||||
|
|
@ -12,7 +12,7 @@ export class MovieService {
|
|||
constructor(private http: HttpClient) {}
|
||||
|
||||
getAllMovies(): Promise<any> {
|
||||
const url = environment.baseUrl + '/content/';
|
||||
const url = environment.baseUrl + '/video/';
|
||||
const headers = this.getAuthHeaders();
|
||||
return lastValueFrom(this.http.get(url, { headers }));
|
||||
}
|
||||
|
|
@ -24,7 +24,7 @@ export class MovieService {
|
|||
}
|
||||
|
||||
uploadMovie(formData: FormData) {
|
||||
const url = environment.baseUrl + '/content/upload/';
|
||||
const url = environment.baseUrl + '/video/upload/';
|
||||
const headers = this.getAuthHeaders();
|
||||
return lastValueFrom(this.http.post(url, formData, { headers }));
|
||||
}
|
||||
|
|
@ -74,7 +74,7 @@ export class MovieService {
|
|||
private fetchAndCacheResolutions(
|
||||
videoID: number
|
||||
): Observable<{ [resolution: string]: boolean }> {
|
||||
const url = `${environment.baseUrl}/content/movie/${videoID}/`;
|
||||
const url = `${environment.baseUrl}/video/movie/${videoID}/`;
|
||||
const headers = this.getAuthHeaders();
|
||||
|
||||
return new Observable<{ [resolution: string]: boolean }>((observer) => {
|
||||
|
|
|
|||
Loading…
Reference in a new issue