Giter VIP home page Giter VIP logo

art-area's Introduction

ArtArea

Join the chat at https://gitter.im/art-area/community

Currently readme works as a project description for PL project description, but worth mentioning, that it's not only for university, but also for our team personal work out

Service for source control and management of digital art projects

Требования к проекту (rus)

Проект Art Area

Описание

Сервис, нацеленный на автоматизацию и организацию процесса создания визуального контента группами и отдельными художниками, а так же для организации процесса обучения групп начинающих художников.

Функциональные требования

  1. Пользователь может создавать новые проекты
  2. В рамках проекта пользователь может создавать задачи по проекту
  3. Пользователь может добавлять участников и настраивать их уровень доступа к данным проекта
  4. Загружать изображения и исходники для проекта
  5. Обсуждать изображения и исходники
  6. Отправлять результаты работы на проверку
  7. Делать запросы на редактирование арта
  8. Локально задавать структуру проекта на компьютере художника
  9. Автоматизировано проводить контроль версий по исходникам

Технические требования

  1. Веб-приложение
    1. Back-end ASP.NET C#
    2. Angular
  2. Десктопное приложение
    1. ASP.NET Giraffe - F#
    2. WPF? для Windows
  3. База данных MongoDB
  4. Доступ к данным производится через RESTfull API
  5. Асинхронность поведения сервиса с целью защиты от лагов и провисаний

Катун Илья, Агеев Андрей, Нестеров Сергей, Дзюба Виктория

Problem

Modern development of visual art lacks structure and automation. We see following problems:

  • managers (or clients) are usually loosly coupled with designers & artists and they don't have general tool for sharing ideas, tasks & discussing them - Pinterest/Behance/ArtStation for inspiration, Google Docs/Drive/Email for sharing tasks & dis. docs, many different tools that make it easy to loose or miss something
  • designers often lack structure in developemnt - they simulataneously store many different source files of the same task, call them stuipidly & mismatch them when send for review, which slows development process down

Solution

Art Area - service for management & source control. (Most close service of the same type is GitHub)

We provide:

  • Web Client which is mainly for managers

    For example one can work in Ubisoft as a game-designer. GD got an idea of the game, which was supported by the direction of the company & now one has to start brainstorming & creating consepts with one's new team of designers & artists. For this new project one creates a new private Project on our service which can be than used on any stage of game development.

    Inside project GD creates Art Boards - special containers for art dedicated to some separated task. For example as on is only starting project one needs a design for main charater - old pirate. GD creates an Art Board where one describes this character, attaches references, assignes designers, puts tags, etc. In this way Art Board is a mix of task, discussion & storage for solution version.

    After that assigned designer procced to Desktop Client where they initialize project on their PC. Client defines file structure associated with project structure in our service & handels simple back-up like versioning. During the development at any moment artist can submit new version of file - Pin, attach thumbnail and message to it. If designer sees, that previous Pin of consept was better one can always switch to it using desktop client. Worth mentioning, that it's possible to submit Pins using web client.

    When designer finds that it's there is good Pin (or collection of pins) one can send a Review Request to other user (or group of users). Review Request can be either approved or disapproved (with Edit Request). Review Request is not required actually - users still can comment Pin & possibly mark bad and good results on a thumbnail image.

    After this kind of iterative work manager can mark Art Board as finished, mark some Pins as solution-one, delete everything (which we do not support) one finds odd & meaningless.

  • Desktop Client

    In desktop client designer (as it's main target-users are artists) clones Project and Art Board he is intersted in (and able to - security and administrating 🔒). In this way one will have a folder in file system with Project name and inner folder with Art Board name where one should create a source file (for example .psd file) which will be registered by the system. Than after some work user can submit a new Pin which (as it was already mentioned) is a combination of a source file, thumbnail (small image that describes work done) & message.

    It is important that pins are actually grouped by source files in sequences if one wasn't changing a source file name on a client which we do not support too. In this way we not only have different versions & ideas for the file, we have it's history.

    In desktop client user can submit new pins, get pins of other users, load new Art Boards and delete existing one locally.

Implementation Notes

We will use mainly powerful .NET Core 3.0 platform:

  • Web Client
    • ASP.NET Core (C#) - OOP
    • Angular (TypeScript) - Declarative
  • Desktop
    • Web API (F#) - Functional
    • WPF (C#) - OOP
  • MongoDB as Database

More details about used technologies & frameworks will be provided in appropriate readmes of projects

Features

We should note that this project is developed not only for FLS Hackathon & PL Pass Project, but also as a global challenge for our team, so current list of features is not what we want to develop for concrete point of time, but what we want to see in our MVP+ project version (commercial-ready MVP). Currently we can't say what we will develop (also because we don't know time limits established) Also though this feature-task list looks massive and full it's not

Web Client:

  • User
    • Sing In
    • Sign out
    • Identity-like user validation
    • Editing user data (name, username, password, avatar)
    • User Dashboard Profiling
  • Project Creation
    • Simple static fields
    • Privacy settings
    • Cold-start collaborators and roles
  • Project Editing (basic data)
  • Project Management
    • Project Deletion/Closing
    • Add/Remove/Edit role of collaborator
    • Change privacy of project (private, public)
  • Art Board functinality
    • Create Art Boards
      • Basic Data
      • Assigned collaborators
      • Privacy settings (private, locked, public)
      • Desing Document
        • (*) Intgration with Pinterest for auto-loading of references
        • (*) Custom file attachments
        • (*) Thumbnail images (.png/.jpeg/.gif) attacments & display
      • (*) Tags (=> tag management inside Art Board/Project)
    • Delete Art Board
    • Edit Art Board Data
      • Name + Desciption + DD
      • Privacy settings
      • Assignees
  • Pin Functionality
    • Create New Pin via special form
    • Comment a Pin (possibly comment concrete point on a pin) + Delete, Edit comment
    • Approve/Disapprove Pin
    • Download Pin Source Code
    • Manage Pin accessibility (private, locked, public)
    • Group Pin by source files => create Pin history (works for source files with the same name)

Desktop Client

  • Sign In
  • Clone Project
  • Clone Art Board => establish Project structure further in some folder
  • Post new Pin
  • Show other pins
  • Download source files & change local source files with remote ones

art-area's People

Contributors

dependabot[bot] avatar flamingo221100 avatar gitter-badger avatar katunilya avatar mohorka avatar sabinaalieva avatar sixdevelop avatar

Watchers

 avatar  avatar

Forkers

gitter-badger

art-area's Issues

Disign MVP Requirements & Project Roadmap

Problem

Before developing we should design what features we are going to include in our first 0.1 release.

Solution

For that, we design a list of features as MVP Requirements. With them, we will design all the issues and tasks for each development step. In this thread, we are going to discuss it and finally write it in the documentation.

First of all, we need to think about what artists really need and how we can provide them the most significant features.

Keep in mind that this is also going to be our development tool

Develop UX & UI for web client & desktop client

Problem

Before starting development we should carefully analyze our project & find out how we can make it a perfect solution for the problem we are trying to solve.

Some initial thought about it can be found in README.md on title page of repository.

Plan

  • Analyze use cases:
    • Use case for professional teams that develop visual content
      We got managers who are not artists, but they state problems that artists should solve & check their results, ask them to make some changes, etc. Also we have artists that wish to have well structured project folder on local machine & easy VCS that allows them quickly switch between different versions of project. It's also important to provide extensible privacy settings (as some arts should be closed & accessible only for some users & develop user roles in projects).
      So there we should design UX for managers & artists
    • Use case for education studios & projects (for managing groups of students)
      There we have teachers that are professional artists, that want to check works of their students & state tasks for them & students that send solutions for tasks from teachers & teachers comment them & explain their mistakes
    • Use case for individual artists (freelance mainly)
      This is really optional use case which suggests that artists can store their personal/freelance works & easily structure them for better & quicker results
  • Design UI for web client that is mainly oriented on managers, but supports some feature for artists (@SixDevelop @mohorka)
  • Design UI for desktop client (@SixDevelop @mohorka)
  • Design domain model (which should map on our db structure to utilize all our needs in storing information & managing user roles) (@AndyS1mpson)

Notes

Last 3 tasks should be done simultaneously, first on in group

When developing UI I suggest finding references in other services & it will be good if someone will study some UX/UI course if there is time.

Our UX design (as text & schemes) should be written in Wiki section of repository, database scheme as a result of domain analize should be saved in documentation folder in our repository

Developer discussion of this issue should be done in gitter dev room

Выделение логики контроллеров в сервисы

Проблема

Архитектурно контроллеры должны содержать только логику связанную с обработкой запроса и отправкой ответа, непосредственно логика получения и обработки данных должна реализовываться соответствующим сервисом.

Решение

Для уже имеющихся и будущих контроллеров требуется писать сервисы и помещать их в папку Service проекта ArtArea.Web. Так же нужно не забывать прописывать DI (в классе Startup нужно в методе ConfigureServices для каждого сервиса прописывать services.AddTrancient<ClassService>();.

Для сервиса контроллера аутентификации (AuthController, AuthService) нужно:

  • получение токена по username JwtSecurityToken GetToken(string username)

  • добавление нового пользователя - выкидывает исключение, если нельзя добавить пользователя

  • проверка логина пользователя по логину и паролю

  • проверка запроса на залогиненного пользователя - если пользователь залогинен, то в заголовке запроса придет jwt токен

Для сервиса к UserController:

  • проверка на существование пользователя

  • получение данных пользователя (сырой модели)

  • получение всех проектов пользователя, учитывая залогиненного пользователя

Для сервиса к ProjectController:

  • проверка существования проекта

  • получение всех досок проекта

  • получение данных проекта (сырой модели)

Заметки

Полезные ссылки по токенам и авторизации

Ветка: feature/controller-services-integration

Navigation and Pages

Problem caused feature request

Web Client navigation description

Requested Solution

Pages:

Page Description Forms Routing Direct Links
Welcome Use case info No /Welcome Register, Login
Register Simple register form with the most important values Registration Form /join No (Redirects to User Page)
Login Simple login form Login Form /login No (Redirects to User Page)
User Page Displays user data, async avatar loader, list of repositories, user info editing form, create new repository buttonm delete repository Load Avatar Form, User Data Form /{username} Repository Page, New Repository Page
New Repository Page Simple form for creating new repository New Repository Form /create No (Redirects to created repository)
Respoitory Page Displays repository data - name, description, list of canvases of this repository, create new canvas button, add collaborator interface and edit description button Add Collaborator Form, Add Collaborator View Component /{username}/{repository_name} New Canvas Page, Canvas Page
Canvas Page Displays canvas data, editing canvas description, /{username}/{repository_name}/{canvas_id} Repsoitory Page
New Canvas Page Form for ccreating canvas with name, description and starting collaborators Canvas Form /{username}/{repository_name}/create No (Redirects to created canvas)

Alternatives

Some pages can change, but we will know about that only during hackathon

Additional Info

Possibly we can add more editing options and search engine across other users and repositories
@mohorka, it is worth using this file as a guideline for controller development

Redirection after submitting new project, board & pin

После того, как пользователь создал новый проект, доску или пон ему после POST запроса должен вернуться id соответствующей сущности, который должны быть переведен в адрес по которому мы перейдем на страницу нового проекта, доски или пина.

В случае с доской и проектом мы получим почти готовый роут в котором нужно все . заменить на / для навигации, в случае с пином мы сразу получим отстрингованный id, который просто нужно вставить в роут.

@SixDevelop реализовать перенаправление на фронте
@mohorka проверить правильность поведения API (возможно нужно возвращать ObjectResult а не Ok)

Страница: Project Page + Controller

Problem caused feature request

Страница проекта предоставляет основную функциональность по работе с проектами: создание новых досок, добавление новых участников, тэгов, навигация к Review Request'ам, переход к существующим доскам

Requested Solution

Страница должна отображать данные по проекту - его название, краткое описание (если есть), список всех досок и кнопку по добавлению новых элементов проекта - пока только досок.

  • fetch запрос на данные проекта
  • fetch запрос на доски (исходя из данных залогиненного юзера)
    Для пользователю (или отсутствию залогиненного пользователя) мы проверяем какие данные он имеет право просматривать (доски) их мы и вернем как результат этого запроса

Route : ../{username}/{project-name} ❓ Здесь нужно подумать, как удобнее - будем ли мы строго привязывать проект к пользователю (админу) или нет?
Контроллер : ProjectController
Ветка для фронта : feature/project-page-front
Ветка для бэка : feature/project-page-api
Ветка для интеграции : feature/project-page-integration

Blocked #19

Страница: Pin Page + Controller

Problem caused feature request

Нам нужно отображать данные о конкретном пине, конкретной точке в истории конкретного прикрепленного исходного файла. Пин должен отображать ленту комментариев (и позволят добавлять новые к нему), отображать изображение-заглушки (thumbnail), а так же позволять скачивать исходник прикрепленный к пину (если он есть)

Requested Solution

Опять же нужно учитывать, что не каждый юзер имеет доступ к любому пину и доске, так что если кто-то хочет через url напрямую получит доступ к скрытым данным, мы должны выдать ему ошибку поиска (404)

  • ⚠️ Дизайн для страницы пина
  • fetch на короткие данные по пину (название и заголовочное сообщение)
  • fetch на изображение заглушку
  • fetch на загрузку исходника
  • fetch на загрузку комментариев
  • fetch на отправку нового комментария

Route : ../{username}/{project-name}/{boardId = int}/pin/{pinId - stringed ObjectId} ❓ Возможно мы можем как-то укоротить длину URL
Контроллер : PinController
Ветка для фронта : feature/pin-page-front
Ветка для бэка : feature/pin-page-api
Ветка для интеграции : feature/pin-page-integration

Blocked #19 #20 #21

Проверка пользователя

Problem caused feature request

Мы должны после любого запроса знать, что за пользователь (или аноним) его совершает (т.е. так или иначе иметь некоторый идентификатор того, кто по факту залогинен), чтобы мы могли проводить проверку на доступ к данным (по запросу в базу)

Requested Solution

JWT, Cookies

Ветка : feature/auth-verification

Reimagine domain models

Problem caused feature request

Стало понятно, что у нас слишком сложная вложенная структура сущностей

Requested Solution

Мы упростим структуру отказавшись от Pin Group и оставим только вложенные в доски Pin'ы.

Branch: reimagine/pin-group-deprecation

Develop Domain Model (DB Entities)

Problem caused feature request

We need to store domain specific data for our service

Requested Solution

In order to use Identity we will store auth specific data (usernames & passwords) in MS SQL db & all other data in MongoDB.


User

Property Data Type Description
Id Guid -
Username string -
Password string -

Repository

Property Data Type Description
Id ObjectId -
Owner ObjectId id of user that created repository
Contributors [ObjectId] list of ids of users that work with this repository
Canvases [ObjectId] list of ids of canvases created in this repository
Name string -
Description string optional

Canvas

Property Data Type Description
Id ObjectId -
Creator ObjectId id of the user created this canvas
Assignees [ObjecId] list of ids for users that take part in working under this canvas
Files [ObjectId] list of files attached to this canvas to work
Name string -
Description string optional
DisDoc ObjectId id of the message that describes task for this canvas
Messages [ObjectId] list of messages in the canvas thread
Pull Requests [ObjectId] list of pull requests in the canvas thread

Message

Property Data Type Description
Id ObjectId -
Author ObjectId id of the user created message
Text string (markdown) text for the message
PublicationDate DateTime when this message was sent

Pull Request

Property Data Type Description
Id ObjectId -
Message Message description of work done
File ObjectId id of the file to review
Reviewers [ObjectId] ids of users that review this pull request
Authors [ObjectId] ids of users that worked under this pull request
Request Status enum defines whether it is approved or not (or waits review)

Edit Request

Property Data Type Description
Id ObjectId -
Message ObjectId id of the message (reply) for pull request
Pull Request ObjectId id of the pull request that we submit for editing

File

Property Data Type Description
Id ObjectId -
File Name string name of the file (donno with or without extension)
Commits [ObjectId] list of ids of commits that are linked with actual files in db

Commit

Property Data Type Description
Id ObjectId -
Message string description of what is in this commit
File ObjectId id of the file in gridfs collection for files
Commit Order int number of the commit [1…n]

Alternatives

Possibly we could store all data in MS SQL db except file data, however 1-to-many relationship is much easier in mongo

Additional Info

This data used for storing in db, for views we will have additional view models described in issue for pages

UI

Проблема

Отсутствие UI приводит к тому, что нет четкого понимания, какие компоненты на страницах нам нужны и что в них должно быть (какие данные), поэтому затруднительно писать сервисы и компоненты для front'а и endpoint'ы для back'а

Решение

Требуется разработать дизайн для следующим компонентов:

  1. Страница логина
    image
    На данный момент имеется вот этот концепт. Он в целом хорош и изменений не требуется, но общая стилистика (которую нужно выстроить) может его поменять

  2. Страница регистрации
    image
    Здесь нужно так же учесть валидацию модели формы, т.е. как будут высвечиваться ошибки, если данные введены неверно

  3. Страница пользователя (концептов нет)
    Страница пользователя должна отображать

    • Аватар пользователя
    • Его данные - юзернейм, реальное имя, почту (опционально)
    • Переход на страницу настроек профиля (изменения данных и настроек приватности)
    • Список проектов пользователя
      Каждый проект отдельно отображает
      • Название проекта
      • Его автора (это не обязательно сам пользователь, речь идет вообще о всех проектах в которых он принимает участие)
      • Уровень приватности (скрытые проекты, которые доступны залогиненному пользователю и тому, на чей странице мы находимся так же отображаются)
      • Описание проекта
        Список проектов мне кажется лучше сделать либо списком из карточек, либо таблицей
    • Кнопка создания нового проекта
    • Форма создания нового проекта - высвечивается поверх страницы в виде окошка, содержит в себе следующие поля:
      • Название проекта
      • Описание проекта
      • Уровень приватности проекта
      • Валидация данных проекта - один пользователь не может иметь 2 проекта с одинаковыми названиями (с точностью до нижнего регистра букв и пробелов)
  4. Страница проекта
    Страница проекта должна отображать

    • Список досок в рамках проекта (это что-то типа задач)
      На доске отображается

      • Название
      • Короткое описание
      • Прикрепленные тэги
      • Аватарки участников доски
      • ВОЗМОЖНО значок того, что в рамках доски открыт Review Request (запрос на проверку сделанной работы)
    • Название проекта

    • Краткое описание проекта

    • Кнопка добавления...

      • Новой доски
        Выскакивает формочка которая отображает поля для
        • Названия новой доски
        • Короткого описания
        • Поле для подробного описания задачи - диздока (сюда можно еще дроп-даунов грузить фотки)
        • Настройки приватности (кому виден проект - дроп-даун меню)
        • Дроп-даун список в котором отмечаются те кого мы делаем участниками доски
        • Дроп-даун меню для выбора тэгов которыми мы метим данную доску
      • Нового участника
        • Выскакивает поле поиска, которое асинхронно обновляется показывая наиболее подходящих по запросу пользователей
      • Нового тэга
        • Выскакивает поле в котором нужно ввести название тэга, его описание и выбрать цвет (ввести hex представление) + кнопочка случайно генерации цвета
    • ЕСЛИ ЭТО КРАСИВО то можно так же сразу отображать участников проекта и тэги

    • Список открытых Review Request'ов

      • Название доски в которой сделан ревью реквест
      • Название ревью реквеста
      • Тэги прикрепленные к ревью реквесту
    • Иконка перехода к настройкам проекта (данные и приватность)

Есть следующие наработки (явно плохо, прости @SixDevelop )
image
image
image

  1. Страница доски
    Аналогично странице проекта мы отображаем
    • Название доски
    • Короткое описание доски
    • Специальную вкладку в которой отображается сообщение-задание к доске (как и все сообщения оно отображается в виде текста с аватаркой автора и датой публикации)
    • Список исходников разрабатываемых к доске (исходник - файл историю которого составляют Пины, которые создают художники в процессе работы)
    • Грид состоящий из пинов
      На пине (это что-то типа коммита, только прикрепляется изображение) отображается
      • Thumbnail - это небольшое изображение, которое было прикреплено к пину
      • Некоторая начальная часть сообщения к пину
      • Автор пина
        Пины сгруппированы по исходникам (т.к. каждый пин содержит некоторую версию исходника к которому он прикреплен по времени)
    • Тэги прикрепленные к доске + интерфейс по их изменению (через кнопку рядом со всеми тэгами например)
    • Список участников доски + интерфейс по добавлению/удалению

Ожидаются дополнения для прочих страниц и компонентов

Заметки

Важно выдержать общую стилистику. Лично мне кажется, что будет удобно сделать это используя один общий свет (+некоторые его градации для интерактива - потемнее, посветлее для подсветки выбранных или наведенных на элементов). Так же стоит задумать о некоторой общей логике интерфейса - например все интерактивные (кнопочные) элементы стоит подсвечивать и делать максимально скругленными и т.д. Важный вопрос - шрифт

Desktop Client Groundwork

Задача

Требуется разработать базовую версию для десктоп клиента

Чек-лист

  • Сетап системы с Caliburn.Micro
  • Форма для логина
  • Общий сервис инкапсулирующий логику подгрузки данных
  • DI
  • Отображение проектов пользователя после логина

Branch: feature/desktop-client-groundwork

Страница: Board Page + Controller

Problem caused feature request

На странице доски мы отображаем задачу, исходные файлы и ассоциированные с ними пины (коммиты) с превьюшками

Requested Solution

На этой странице нужно грузить много изображений и она самая сложная из всех (примерно). Страница принимает id доски в рамках проекта (т.е. переходя на страницу мы будем отправлять данные по проекту и id (номеру) доски в рамках проекта.
⚠️ Нужен реально очень хороший и функциональный дизайн для этой страницы, который по большей части и повлияет на требуемый ей интерфейс взаимодействия с сервером

  • fetch для получения данных о доске (название, описание)
  • fetch для загрузки задачи (некоторого текстового фрагмента, пока что неформатированного)
  • fetch для загрузки коротких данных об исходниках
  • fetch для загрузки списка пинов для конкретного исходника

Route : ../{username}/{projectname}/{boardId = int}
Контроллер : BoardController
Ветка для фронта : feature/board-page-front
Ветка для бэка : feature/board-page-api
Ветка для интеграции feature/board-page-integration

Blocked #19 #20

FIXME: User page redirection from top navigation bar

Проблема

Положим у нас есть два пользователя - user_1 и user_2. Мы залогинились под user_1 и перешли на страницу user_2 (при это исчезла кнопка добавления проекта, т.к. мы не можем создать проект от лица другого пользователя).

Теперь перейдя обратно на свою страницу, кнопка создания проекта поменяется, но данные пользователя - его проекты, имя и пр. не изменятся. Это неправильное поведение.

Правильное поведение: все данные должны обновиться

MVC - Controllers

Problem caused feature request

We use ASP.NET Core MVC => we need controllers for this kind of work

Requested Solution

Auth Controller
Used with Identity - @mohorka you know what to do

  • login view & form (get/post)
  • register view & form (get/post)

Home Controller

  • welcome view

User Controller

  • user page view
  • change user data (name & username, async)
  • change user avatar (async)

Repository Controller

  • create repository view & form (get/post)
  • repository view
  • delete repository request
  • edit repository data (description - async)
  • add/remove collaborators from repository (possible async)

Canvas Controller

  • create canvas view & from (get/post)
  • delete canvas
  • add/delete assinees (possibly async)
  • add message (async)
  • add review (pull) request (async)
  • answer with edit request (async)
  • add file (async)
  • new commit (load file from PC - async)

Alternatives

No

Additional Info

No

Страница Пина

Для страницы пина, как на бэке, так и на фронте нужно произвести ря улучшений

  1. Нужно отображать чат. Чат представляет из себя список уже отправленных сообщений +сверху вниз от самого старого к самому новому, в самом верху сообщение, которое было прикреплено к названию пина)

Endpoint: api/pin/messages/{id} возвращает массив из объектов:

{
	username:string;		// author username
	message:string;			// text that should be displayed
	publicationDate:Date;	// when this message was published
}
  1. Нам нужна кнопка по загрузке файла, который мы храним в базе по id pin'a

Endpoint: api/pin/file/{id}

  1. Нам нужен механизм выгрузки фотографий и файлов из базы(сложная задача)
    Во первых для аватарок пользователей (нам нужен реюзабельный компонент в который мы будем передавать параметр - имя пользователя, а он будет представлять из себя маленькую округленную аватарку, по клику на которую мы переходим на страницу юзера)

Endpoints: api/user/avatar/{username}
api/image/{id} id - стрингванное представление ObjectId в базе

Слой данных: MongoDB

Problem caused feature request

Теперь нам нужно разработать реальные репозитории для работы с данными в MongoDb (MongoDb.Driver + GridFS)

Requested Solution

Аналогичным образом #26 на основе уже созданных интерфейсов разрабатываются реальные методы доступа к данным посредством MongoDb (через класс контекста данных)

Нужно реализовать репозитории для:

  • Проекты
  • Доски
  • Пользователи
  • Пины исходников (Pin Group)
  • Пины

Ветка : feature/data-layer-mongo

Blocked #26

Слой данных: mocks

Problem caused feature request

Нам нужно быстрее приступить к тестированию взаимодействия фронта и бэка, но для этого нам нужно брать данные. Поэтому предлагается для начала сделать моки repository pattern'а, для доступа к данных, т.к. это более стабильный и простой способ работы с данными.

Requested Solution

Во-первых нам нужны интерфейсы по работе с базой, чтобы мы могли через DI передавать реализации интерфейсов и далее работать с ними, не задумываясь об их реализации

  • Интерфейсы для доступа к
    • Проектам
    • Доскам
    • Пользователям
    • Пинам исходников (Pin Group)
    • Пинам
  • Моки репозиториев (хранят статический список объектов и передают данные через него)
    • Проектам
    • Доскам
    • Пользователям
    • Пинам исходников (Pin Group)
    • Пинам

Ветка : feature/data-layer-mock

Ветку в которой @AndyS1mpson работает сейчас нужно перекинуть в новую, чтобы она соответствовала названию

Research in the field of VCS

Before actual development, we need to create optimized find out basic information about

  • How .psd file is structured
  • How git works (basic git feature of finding file deltas)
  • Is there any way to optimize deltas?
  • How we can store delta data locally?
  • How we can make branching (made in git)?

Useful links were shared but would be duplicated in the thread

All the research results should be posted there, in comments

@mohorka check this out!

Async/Await hell

Баг

Возникла проблема из-за которой ряд вложенных async/await выражений не успевает заканчивать работу и мы не получаем результат.

Проявления

Проявляется при каскадном удалении данных пользователя для моков (не проходится юнит-тест)

Решение

Мы должны выстроить систему в которой async/await вызывается только один раз - в контроллерах или сервисах, поэтому все методы слоя данных должны просто возвращаться Task и не использовать async/await. К тому же нужно разработать синхронные версии всех методов - пока для моков, а так же прописать их в интерфейсах.

@mohorka - решает задачу на уровне контроллеров/сервисов
@AndyS1mpson - решает задачу на уровне слоя данных

Дополнительно

Branch: bug/data-layer-async-await-hell-fix; bug/web-async-await-hell-fix

Photoshop File Parsing and Analysing

Problem caused feature request

We need to analyze & rebuild different file formats including .psd for out Version Control System #1

Requested Solution

Based on official Adobe Photoshop File Formats Specification we can create a special storage data type and examine .psd files creating object of this type, which will store only data needed for building .psd file from it. Then we will find what properties are different in 2 files and create a delta data object which we will store instead of another .psd file in some .json-like manner.

Short list of to-dos

  • .psd format storage file
  • .psd format parser
  • .psd format builder
  • Delta type & delta building mechanism (from 2 files)
  • Delta serialization & deserialization (setup for commit system)

Alternatives

No. Open for them ✋

Additional Info

This is the foundation for entire system so it should be stable, fast enough & robust

Страницы создания

Problem caused feature request

Нам нужен ряд страниц с которых пользователь может создавать новые объекты в нашей системе - проекты, доски, пины и т.д.

Requested Solution

Нужно три страницы с простыми формами и fetch-запросами который будут в случае успеха редиректить на только что созданный объект (т.е. на страницу пина, доски или проекта)

  • Create Project Page
  • Create Board Page
  • Create Pin Page

В идеале на них должна асинхронно проводиться валидация данных

Route :
../{username}/create
../{username}/{projectname}/create
../{username}/{projectname}/{boardId}/create
Контроллеры : ProjectController, BoardController, PinController
Ветка для фронта : feature/creation-pages-front
Ветка для бэка : feature/creation-pages-api
Интеграция : feature/creation-pages-integration

Blocked #19 #20 #21 #22

Data Services as interface for db

Problem caused feature request

In order to properly separate MongoDB specific expressions we should develop interfaces for models of out mongodb & database itself

Requested Solution

  1. Database should be called artareamongodb
  2. For each collection inside database assignees should provide Data Services which are classes & interfaces that encapsulate work with db entities. For example we have a collection of some User objects inside out db class (let's call it ApplicationDbContext) which is defined as
class ApplicationDbContext
{
    // some fields & other properties 
    IMongoCollection<User> Users => db.GetCollection<Users>("users"); 
}

For it we define an interface:

interface IUserDataService // all this kind of interfaces are ended with DataService suffix
{
   void GetUsers();
   void GetUser(string id);
   // ... other methods that implement CRUD interface
}

And a class which implements this interface (where we actually write real code for working with data:

class UserDataService : IUserDataService
{
   // field that stores our most low-level database interface
   private ApplicationDbContext context; 

   // constructor that gets ApplicationDbContext object via DI (configured in Startup)
   public UserDataService(ApplicationDbContext context)
      => this.context = context;
   public void GetUsers() { /* implementation */}
}

Also @SabinaAlieva wishes to test this via Postman and API controllers which sounds like good idea however it's time consuming and can cause some unpredictable problems. Also worth mentioning that this should be tested with unit tests (each method with several tests which test different behaviour). See xUnit which is simple and supported out-of-the-box by VS (and supposed to be used with .NET Core projects)

Alternatives

No

Additional Info

Assignees @SabinaAlieva & @AndyS1mpson! Remember that you should implement methods that controller developers request first of all

Страницы: регистрация и логин, welcome-страница

Problem caused feature request

image
image
Страницы по регистрации и логину пользователя (именно от них мы будем получать данные о залогиненном пользователе и проверять их по ходу работы)

Requested Solution

Пара страниц, пара fetch запросов на регистрацию, в идеале асинхронная валидация данных

Blocked #19 #20 #21 #22 #23 #24

Route :
../join
../signin
Контроллер : AuthController
Ветка для фронта : feature/auth-front
Ветка для бэка : feature/auth-api
Интеграция feature/auth-integration

Страница: User Page + Controller

Problem caused feature request

Одна из центральных индивидуальных страниц для пользователя. предоставляет основной функционал по работе с сервисом - в первую очередь создание нового проекта.

Requested Solution

Страница пользователя должна отображать данные пользователя - его никнейм, имя, почту, аватар. Так же нужно разработать базовый дизайн для это страницы. Также на странице пользователя должна быть кнопка для создания нового проекта и таблица (из карточек) с проектами в которых пользователь является участником (collaborator)

  • Дизайн для страницы (Adobe XD wires) @SixDevelop @hypnospinner
  • Страница принимает имя пользователя (никнейм) как ключ (т.к. оно уникальное для каждого юзера (в запросе ссылки)
    • fetch запрос на данные (т.е. метод в контроллере и отдельный компонет в анге)
    • fetch запрос на аватар ( -//- )
    • fetch запрос на список проектов ( -//- )

Route : ../{username}
Контроллер : UserController
Ветка для front-end'а : feature/user-page-front
Ветка для бэка : feature/user-page-api
Ветка для слияния и интеграции: feature/user-page-integration (в нее сольются и свяжутся результаты первых двух веток и она потом зальется на мастер)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.