diff --git a/apps/main/admin.py b/apps/main/admin.py index 8c38f3f3..ee9a1a07 100644 --- a/apps/main/admin.py +++ b/apps/main/admin.py @@ -1,3 +1,8 @@ +"""Main app admin conf.""" from django.contrib import admin +from main import models -# Register your models here. + +@admin.register(models.SiteSettings) +class SiteSettingsAdmin(admin.ModelAdmin): + """Site settings admin conf.""" diff --git a/apps/main/apps.py b/apps/main/apps.py index 833bff67..85e12b66 100644 --- a/apps/main/apps.py +++ b/apps/main/apps.py @@ -1,5 +1,8 @@ from django.apps import AppConfig +from django.utils.translation import ugettext_lazy as _ class MainConfig(AppConfig): + name = 'main' + verbose_name = _('Main') diff --git a/apps/main/migrations/0001_initial.py b/apps/main/migrations/0001_initial.py new file mode 100644 index 00000000..66f6a271 --- /dev/null +++ b/apps/main/migrations/0001_initial.py @@ -0,0 +1,36 @@ +# Generated by Django 2.2.4 on 2019-08-19 13:46 + +import django.contrib.postgres.fields.jsonb +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='SiteSettings', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')), + ('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')), + ('country_code', models.CharField(db_index=True, max_length=255, verbose_name='Country code')), + ('pinterest_page_url', models.URLField(blank=True, default=None, null=True, verbose_name='Pinterest page URL')), + ('twitter_page_url', models.URLField(blank=True, default=None, null=True, verbose_name='Twitter page URL')), + ('facebook_page_url', models.URLField(blank=True, default=None, null=True, verbose_name='Facebook page URL')), + ('instagram_page_url', models.URLField(blank=True, default=None, null=True, verbose_name='Instagram page URL')), + ('contact_email', models.EmailField(blank=True, default=None, max_length=254, null=True, verbose_name='Contact email')), + ('config', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=None, null=True, verbose_name='Config')), + ('ad_config', models.TextField(blank=True, default=None, null=True, verbose_name='AD config')), + ], + options={ + 'verbose_name': 'Site setting', + 'verbose_name_plural': 'Site settings', + }, + ), + ] diff --git a/apps/main/models.py b/apps/main/models.py index 223fc62a..acbc4f8e 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -1,86 +1,119 @@ +"""Main app models.""" from django.db import models from django.utils.translation import gettext_lazy as _ from django.contrib.postgres.fields import JSONField +from utils.models import ProjectBaseMixin +# +# +# class Tag(models.Model): +# """Tag model.""" +# name = models.CharField(max_length=250) +# +# +# class MediaAsset(models.Model): +# """Assets model.""" +# PHOTO = 0 +# VIDEO = 1 +# VIDEO_URL = 2 +# PDF = 3 +# DOCUMENT = 4 +# +# ASSET_TYPE_CHOICES = ( +# (PHOTO, _('photo')), +# (VIDEO, _('video')), +# (VIDEO_URL, _('video url')), +# (PDF, _('pdf')), +# (DOCUMENT, _('document')) +# ) +# +# AMAZON_S3 = 0 +# +# STORAGE_TYPE_CHOICES = ( +# (AMAZON_S3, _('amazon s3')), +# ) +# +# PUBLIC = 0 +# PRIVATE = 1 +# ROLE = 2 +# +# ACCESS_TYPE_CHOICES = ( +# (PUBLIC, _('public')), +# (PRIVATE, _('private')), +# (ROLE, _('role')), +# ) +# +# asset_type = models.PositiveSmallIntegerField( +# _('asset type'), choices=ASSET_TYPE_CHOICES, default=PHOTO +# ) +# storage_type = models.PositiveSmallIntegerField( +# _('storage type'), choices=STORAGE_TYPE_CHOICES, default=AMAZON_S3 +# ) +# storage_unit = models.CharField(_('storage unit'), blank=True, default='') +# path = models.CharField(_('path')) +# access_type = models.PositiveSmallIntegerField( +# _('access type'), choices=ACCESS_TYPE_CHOICES, default=PUBLIC) +# asset_text = JSONField(_('asset_text')) +# size = models.IntegerField(_('size')) +# version = models.CharField(_('version'), max_length=250) +# text = JSONField(_('text')) +# +# +# class Contacts(models.Model): +# """Contacts model.""" +# address = models.ForeignKey( +# 'location.Address', verbose_name=_('address'), on_delete=models.CASCADE +# ) +# +# +# class Social(models.Model): +# """Social model.""" +# WEBSITE = 0 +# SOCIAL = 1 +# +# SOCIAL_TYPE_CHOICES = ( +# (WEBSITE, _('website')), +# (SOCIAL, _('social')), +# ) +# +# social_type = models.PositiveSmallIntegerField( +# _('social type'), choices=SOCIAL_TYPE_CHOICES +# ) +# +# +# class Note(models.Model): +# """Note model.""" +# +# +# class Ad(models.Model): +# """Ad model.""" +# -class Tag(models.Model): - """Tag model.""" - name = models.CharField(max_length=250) +class SiteSettings(ProjectBaseMixin): + # todo: mb foreign key? + country_code = models.CharField(max_length=255, db_index=True, + verbose_name=_('Country code')) + pinterest_page_url = models.URLField(blank=True, null=True, default=None, + verbose_name=_('Pinterest page URL')) + twitter_page_url = models.URLField(blank=True, null=True, default=None, + verbose_name=_('Twitter page URL')) + facebook_page_url = models.URLField(blank=True, null=True, default=None, + verbose_name=_('Facebook page URL')) + instagram_page_url = models.URLField(blank=True, null=True, default=None, + verbose_name=_('Instagram page URL')) + contact_email = models.EmailField(blank=True, null=True, default=None, + verbose_name=_('Contact email')) + config = JSONField(blank=True, null=True, default=None, + verbose_name=_('Config')) + ad_config = models.TextField(blank=True, null=True, default=None, + verbose_name=_('AD config')) -class MediaAsset(models.Model): - """Assets model.""" - PHOTO = 0 - VIDEO = 1 - VIDEO_URL = 2 - PDF = 3 - DOCUMENT = 4 + class Meta: + """Meta class.""" - ASSET_TYPE_CHOICES = ( - (PHOTO, _('photo')), - (VIDEO, _('video')), - (VIDEO_URL, _('video url')), - (PDF, _('pdf')), - (DOCUMENT, _('document')) - ) + verbose_name = _('Site setting') + verbose_name_plural = _('Site settings') - AMAZON_S3 = 0 - - STORAGE_TYPE_CHOICES = ( - (AMAZON_S3, _('amazon s3')), - ) - - PUBLIC = 0 - PRIVATE = 1 - ROLE = 2 - - ACCESS_TYPE_CHOICES = ( - (PUBLIC, _('public')), - (PRIVATE, _('private')), - (ROLE, _('role')), - ) - - asset_type = models.PositiveSmallIntegerField( - _('asset type'), choices=ASSET_TYPE_CHOICES, default=PHOTO - ) - storage_type = models.PositiveSmallIntegerField( - _('storage type'), choices=STORAGE_TYPE_CHOICES, default=AMAZON_S3 - ) - storage_unit = models.CharField(_('storage unit'), blank=True, default='') - path = models.CharField(_('path')) - access_type = models.PositiveSmallIntegerField( - _('access type'), choices=ACCESS_TYPE_CHOICES, default=PUBLIC) - asset_text = JSONField(_('asset_text')) - size = models.IntegerField(_('size')) - version = models.CharField(_('version'), max_length=250) - text = JSONField(_('text')) - - -class Contacts(models.Model): - """Contacts model.""" - address = models.ForeignKey( - 'location.Address', verbose_name=_('address'), on_delete=models.CASCADE - ) - - -class Social(models.Model): - """Social model.""" - WEBSITE = 0 - SOCIAL = 1 - - SOCIAL_TYPE_CHOICES = ( - (WEBSITE, _('website')), - (SOCIAL, _('social')), - ) - - social_type = models.PositiveSmallIntegerField( - _('social type'), choices=SOCIAL_TYPE_CHOICES - ) - - -class Note(models.Model): - """Note model.""" - - -class Ad(models.Model): - """Ad model.""" + def __str__(self): + return f'Site: "{self.country_code}"' \ No newline at end of file diff --git a/apps/main/serializers.py b/apps/main/serializers.py new file mode 100644 index 00000000..86f0bda1 --- /dev/null +++ b/apps/main/serializers.py @@ -0,0 +1,21 @@ +"""Main app serializers.""" +from rest_framework import serializers +from main import models + + +class SiteSettingsSerializer(serializers.ModelSerializer): + """Site settings serializer.""" + + class Meta: + """Meta class.""" + + model = models.SiteSettings + fields = ('country_code', + 'pinterest_page_url', + 'twitter_page_url', + 'facebook_page_url', + 'instagram_page_url', + 'contact_email', + 'config', + 'ad_config', + ) diff --git a/apps/main/urls.py b/apps/main/urls.py new file mode 100644 index 00000000..0e62a784 --- /dev/null +++ b/apps/main/urls.py @@ -0,0 +1,10 @@ +"""Main app urls.""" +from django.urls import path +from main import views + +app = 'main' + +urlpatterns = [ + path('site-settings//', views.SiteSettingsView.as_view(), + name='site-settings',) +] \ No newline at end of file diff --git a/apps/main/views.py b/apps/main/views.py index 91ea44a2..fd5f095d 100644 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -1,3 +1,12 @@ -from django.shortcuts import render +"""Main app views.""" +from rest_framework import generics, permissions +from main import models, serializers -# Create your views here. + +class SiteSettingsView(generics.RetrieveAPIView): + """Site settings View""" + + lookup_field = 'country_code' + permission_classes = (permissions.AllowAny,) + queryset = models.SiteSettings.objects.all() + serializer_class = serializers.SiteSettingsSerializer