Simple web CRUD to manipulate patients. Application uses Clojure, ClojureScript (not for SPA), PostgreSQL and some cool libraries!
The project requires Leiningen (2.0.0+).
# Setup env variables:
$ export HTTP_PORT=8080
$ export DATABASE_JDBC_URL=jdbc:postgresql://127.0.0.1:5432/health_patient?user=postgres&password=pass&stringtype=unspecified
# Start repl:
$ make install
$ make start
# Start server:
user=> (dev) # Enter to development namespace
health-repl=> (start) # Start systems (db connection, http server...)
health-repl=> (refresh) # Reload changed namespaces and restart systems
If you want you can use PostgreSQL from Docker. It's easy:
$ make docker-build
$ make docker-db # Database will run in background
Don't forget update DATABASE_JDBC_URL
env variable if necessary
$ make auto-frontend
If you use Neovim and Conjure you can configurate your init.lua like this:
vim.g['conjure#client#clojure#nrepl#refresh#after'] = 'health-repl/restart'
And restart changed namespaces by default mapping <localleader>rr
. See Conjure doc. It's very cool!
- Вывод "нет пациентов", если в списке нет пациентов
- Подумать про более изящное оформление селекторов в cljs
- Оставить строками? Перенести на структуру данных?
- Добавить обработку кейса с дублированием номера ОМС
- Добавить отображение ошибок формы при создании/редактирования пациента (напр., сообщение о пользователе с таким номером ОМС)
- Добавить пагинацию для списка пациентов
- Заиспользовать clojure.spec?
- Подумать про генерацию тестовых данных через spec
- Подумать про замену библиотеки
struct
на clojure.spec
- Добавить кеширование через Redis
- Заменить подчёркивания на минусы в структуре пациента
- Написать макрос для более удобного связывания типа
[селектор-со-множеством-нод] (действие-для-каждой-ноды)
в cljs - Подумать про рефакторинг роутинга
- Сделать роут создания пациента как
/patients/create
?/patients-forms/create
?
- Сделать роут создания пациента как
- Подумать про функции для генерации роутов (url)
- Почитать и сделать более удобный cljs workflow с приятным repl
- Добавить деплой через k8s
- Добавить аутентификацию/авторизацию
- Добавить милые 404 / 500
- Добавить linting в CI
- Добавить отправку ошибок куда-нибудь (в Sentry, напр.)
- Заиспользовать testcontainers для более продвинутого запуска тестов?
- Написать фронтенда макрос "выполни функции, если валидация по схеме прошла успешно"
- Изменить место конфигурации с переменных окружения на чтение файла
.env
- Добавить преобразование даты из БД в более гибкий объект (java.sql.Date -> LocalDate?)
- Переписать фронтенд на re-frame / reagent / fulcro / etc
- Добавить отдельный lein профиль для продакшн сборки cljs (с оптимизациями/сжатием)