Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

base #1

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

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

proto/user/user_service.proto Show resolved Hide resolved
proto/user/user_service.proto Show resolved Hide resolved
proto/user/user_service.proto Show resolved Hide resolved
proto/datakeeper/data_keeper_service.proto Outdated Show resolved Hide resolved
proto/datakeeper/data_keeper_service.proto Outdated Show resolved Hide resolved
cmd/userStorageServer/storage/storage.go Outdated Show resolved Hide resolved
cmd/client/rpc/impl.go Outdated Show resolved Hide resolved
cmd/client/rpc/impl.go Outdated Show resolved Hide resolved
cmd/client/rpc/impl.go Outdated Show resolved Hide resolved
cmd/client/rpc/impl.go Outdated Show resolved Hide resolved
cmd/client/main.go Outdated Show resolved Hide resolved
cmd/storageServer/main.go Outdated Show resolved Hide resolved
cmd/userServer/main.go Outdated Show resolved Hide resolved
cmd/client/main.go Show resolved Hide resolved
)

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 в том числе


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

cmd/client/main.go Outdated Show resolved Hide resolved
cmd/client/main.go Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
README.md Show resolved Hide resolved
@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 в том числе


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

README.md Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
README.md Show resolved Hide resolved

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

[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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants