Skip to content

base #1

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
merged 30 commits into from
Feb 11, 2023
Merged

base #1

merged 30 commits into from
Feb 11, 2023

Conversation

GermanVor
Copy link
Owner

No description provided.

@GermanVor
Copy link
Owner Author

Я очень сильно задушнился, если честно. Так вышло, что я откладывал курсовую на потом, а потом я внезапно очень сильно простыл и выпал из жизни на неделю - пришлось делать приложение в последние вечера.
Либо я чего то не понял, либо вся курсовая - это повторение пройденного задания без чего либо нового, ничего интересного только рутина и много человекочасов.

Задание - в минимальной реализации ничего особенного Get/Set/New/Delete/Get для листинга вокруг каких то абстрактных данных.

В остальном нужно развлекать себя самому (делать допы типа TOTP или еще чего).
Понятно, что нет пределу совершенства и даже такое техническое задание можно развить в годный проект - например клиент сделать не консольный парсер строк, а написать человеческое SPA с React и Node js сервером. И пусть Node js сервер по gRPC взаимодействует с сервисом авторизации и сервисом самого хранилища и т д развивать эту идею и придумывать всякие сложные оптимизации, практиковаться в пагинациях и т п, но прям желания что то нет. Все во что я могу развить курсовую дальше - это вариации рутины, написание мидлварь, написания rpc мидлварь, написание оберток вокруг базы данных и т п.

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

Что сделал: два сервиса (userStorageServer - сервис авторизации пользователей и storageServer - главный сервис со всем хранилищем) и клиентское консольное приложение. Делал все максимально просто и примитивно. Вместо кук авторизации jwt токен с userId. Все сущности в хранилище определяются комбинацией id и userID. В Начале запускается сервис userStorageServer. В нем генерируется список пустых строк с единственной заполненой ячейкой secret. (наверное ближайшая аналогия - это ключи активации винды, подразумевается, что все пользователи знают свои ключи и ключи заранее вбиты в базу). Через свое консольное приложение пользователь может либо создать аккаунт (SignIn), либо авторизоваться (logIn) и получить свой токен. Дальше токен прикладывается к запросам к сервису storageServer. Модель хранения данных: массив байт для самих данных, массив байт для meta информации, флажок типа данных. Все сервисы взаимодействуют друг с другом через gRPC. Когда сервис storageServer получается запрос, он достает jwt из контекста и идет в сервис userStorageServer для авторизации и получения userID, по которому дальше делает манипуляции с пользователем.

Все данные приводятся к массиву бит, самая примитивная модель и простая была выбрана.

@GermanVor
Copy link
Owner Author

GermanVor commented Jan 31, 2023

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

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

@GermanVor
Copy link
Owner Author

Доки не делал и тестами особо не покрывал специально, времени из за болезни мало было и если что доделаю эти все украшательства после первого ревью.

@GermanVor GermanVor requested a review from mr-fard4y February 2, 2023 16:46
)

var (
tryAgainStr = "Try again."
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

возможное улучшение:
описание переходов UI описатье через "конечный автомат"/"машину состояний"

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

не понял. Можно какой нибудь маленький пример на псевдокоде.

Copy link
Collaborator

@mr-fard4y mr-fard4y Feb 10, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

схематично выглядит примерно так
image

в единиицу времени из текущего состояния есть возможность перехода в новое или завершения работы
реализуется на основе графов
статейка для ознакомления
статейка для ознакомления-2

такой подход унифицирует описание всех возможных кейсо работы приложения, UI в том числе


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

@GermanVor
Copy link
Owner Author

добавить описание последовательности запуска сервисов; хорошо бы иметь блок-схему этой связи и потоков данных между ними; - в README.md рутовом. Блок схема тоже в руте, на знал как на одной блок схеме отобразить работу трех сервисов - сделал как смог.

Limit int32
}

type Interface interface {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

например, Storager, Repository, etc

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Secret string
}

type Interface interface {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

например, Authorizator, IAuth, UserManager, etc

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

)

var (
tryAgainStr = "Try again."
Copy link
Collaborator

@mr-fard4y mr-fard4y Feb 10, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

схематично выглядит примерно так
image

в единиицу времени из текущего состояния есть возможность перехода в новое или завершения работы
реализуется на основе графов
статейка для ознакомления
статейка для ознакомления-2

такой подход унифицирует описание всех возможных кейсо работы приложения, UI в том числе


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


## Сценарий работы

[Cхема](Model.jpg)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

лучше в следующей вариации

![<description-text>](<path-to-file>)

@GermanVor GermanVor merged commit 54050c7 into master Feb 11, 2023
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants