├── .air.toml ├── .dockerignore ├── .env.example ├── .github └── workflows │ ├── build.yml │ └── test.yml ├── .gitignore ├── Dockerfile ├── Makefile ├── challenge-docs.md ├── cmd └── api │ └── main.go ├── config └── config.go ├── docker-compose.yml ├── docs ├── client.http ├── docs.go ├── setup.md ├── swagger.json └── swagger.yaml ├── go.mod ├── go.sum ├── internal ├── core │ ├── usecase_error.go │ ├── validation_error.go │ └── validator.go ├── domain │ └── notification │ │ ├── notification_adapter │ │ └── dispatcher.go │ │ ├── notification_dto │ │ ├── cancel_notification_dto.go │ │ ├── create_communication_channel_dto.go │ │ ├── get_notification_dto.go │ │ └── schedule_notification_dto.go │ │ ├── notification_entity │ │ ├── communication_channel.go │ │ ├── communication_channel_test.go │ │ ├── notification.go │ │ ├── notification_test.go │ │ └── notification_value_object │ │ │ └── status.go │ │ ├── notification_repository │ │ ├── communication_channel_repository.go │ │ └── notification_repository.go │ │ └── notification_usecase │ │ ├── cancel_notification_usecase.go │ │ ├── cancel_notification_usecase_test.go │ │ ├── check_and_send_notification_usecase.go │ │ ├── check_and_send_notification_usecase_test.go │ │ ├── create_communication_channel_usecase.go │ │ ├── create_communication_channel_usecase_test.go │ │ ├── get_notification_usecase.go │ │ ├── get_notification_usecase_test.go │ │ ├── schedule_notification_usecase.go │ │ ├── schedule_notification_usecase_test.go │ │ ├── setup_test.go │ │ └── usecase.go └── infra │ ├── database │ └── mongo_repository │ │ ├── collection.go │ │ ├── communication_channel_mongo_repository.go │ │ ├── mongo_repository_mapper │ │ ├── communication_channel_mongo_mapper.go │ │ └── notification_mongo_mapper.go │ │ └── notification_mongo_repository.go │ ├── observability │ └── metric │ │ ├── endpoint_metric │ │ ├── adapter.go │ │ ├── metric.go │ │ └── registry.go │ │ ├── job_metric │ │ └── notification_job_metric │ │ │ ├── metric.go │ │ │ └── registry.go │ │ └── metric.go │ ├── swagger.go │ └── transport │ └── rest │ ├── endpoint │ ├── endpoint.go │ └── v1 │ │ ├── cancel_notification_endpoint.go │ │ ├── create_communication_channel_endpoint.go │ │ ├── get_notification_endpoint.go │ │ ├── handler.go │ │ ├── schedule_notification_endpoint.go │ │ └── welcome_endpoint.go │ ├── response.go │ └── server.go ├── ops ├── grafana │ └── provisioning │ │ ├── dashboards │ │ ├── dashboards.yml │ │ └── push.json │ │ └── datasources │ │ └── datasource.yml └── prometheus │ └── prometheus.yml ├── pkg ├── dispatcher │ └── simulation_dispatcher.go └── mongodb │ └── connection.go └── test ├── container ├── mongo.go └── mongo_test.go ├── factory ├── make_communication_channel.go └── make_notification.go ├── fake └── dispatcher.go ├── inmemory ├── inmemory_communication_channel_repository.go └── inmemory_notification_repository.go └── integration ├── helper └── http_helper.go ├── setup_test.go ├── v1_cancel_notification_endpoint_test.go ├── v1_create_communication_channel_endpoint_test.go ├── v1_get_notification_endpoint_test.go └── v1_schedule_notification_endpoint_test.go /.air.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/.air.toml -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .gitignore 2 | README.md -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/.env.example -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/.github/workflows/build.yml -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/.github/workflows/test.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/.gitignore -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/Dockerfile -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/Makefile -------------------------------------------------------------------------------- /challenge-docs.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/challenge-docs.md -------------------------------------------------------------------------------- /cmd/api/main.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/cmd/api/main.go -------------------------------------------------------------------------------- /config/config.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/config/config.go -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/docker-compose.yml -------------------------------------------------------------------------------- /docs/client.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/docs/client.http -------------------------------------------------------------------------------- /docs/docs.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/docs/docs.go -------------------------------------------------------------------------------- /docs/setup.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/docs/setup.md -------------------------------------------------------------------------------- /docs/swagger.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/docs/swagger.json -------------------------------------------------------------------------------- /docs/swagger.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/docs/swagger.yaml -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/go.mod -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/go.sum -------------------------------------------------------------------------------- /internal/core/usecase_error.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/core/usecase_error.go -------------------------------------------------------------------------------- /internal/core/validation_error.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/core/validation_error.go -------------------------------------------------------------------------------- /internal/core/validator.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/core/validator.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_adapter/dispatcher.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_adapter/dispatcher.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_dto/cancel_notification_dto.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_dto/cancel_notification_dto.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_dto/create_communication_channel_dto.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_dto/create_communication_channel_dto.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_dto/get_notification_dto.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_dto/get_notification_dto.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_dto/schedule_notification_dto.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_dto/schedule_notification_dto.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_entity/communication_channel.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_entity/communication_channel.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_entity/communication_channel_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_entity/communication_channel_test.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_entity/notification.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_entity/notification.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_entity/notification_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_entity/notification_test.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_entity/notification_value_object/status.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_entity/notification_value_object/status.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_repository/communication_channel_repository.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_repository/communication_channel_repository.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_repository/notification_repository.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_repository/notification_repository.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_usecase/cancel_notification_usecase.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_usecase/cancel_notification_usecase.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_usecase/cancel_notification_usecase_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_usecase/cancel_notification_usecase_test.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_usecase/check_and_send_notification_usecase.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_usecase/check_and_send_notification_usecase.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_usecase/check_and_send_notification_usecase_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_usecase/check_and_send_notification_usecase_test.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_usecase/create_communication_channel_usecase.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_usecase/create_communication_channel_usecase.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_usecase/create_communication_channel_usecase_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_usecase/create_communication_channel_usecase_test.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_usecase/get_notification_usecase.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_usecase/get_notification_usecase.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_usecase/get_notification_usecase_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_usecase/get_notification_usecase_test.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_usecase/schedule_notification_usecase.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_usecase/schedule_notification_usecase.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_usecase/schedule_notification_usecase_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_usecase/schedule_notification_usecase_test.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_usecase/setup_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_usecase/setup_test.go -------------------------------------------------------------------------------- /internal/domain/notification/notification_usecase/usecase.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/domain/notification/notification_usecase/usecase.go -------------------------------------------------------------------------------- /internal/infra/database/mongo_repository/collection.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/database/mongo_repository/collection.go -------------------------------------------------------------------------------- /internal/infra/database/mongo_repository/communication_channel_mongo_repository.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/database/mongo_repository/communication_channel_mongo_repository.go -------------------------------------------------------------------------------- /internal/infra/database/mongo_repository/mongo_repository_mapper/communication_channel_mongo_mapper.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/database/mongo_repository/mongo_repository_mapper/communication_channel_mongo_mapper.go -------------------------------------------------------------------------------- /internal/infra/database/mongo_repository/mongo_repository_mapper/notification_mongo_mapper.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/database/mongo_repository/mongo_repository_mapper/notification_mongo_mapper.go -------------------------------------------------------------------------------- /internal/infra/database/mongo_repository/notification_mongo_repository.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/database/mongo_repository/notification_mongo_repository.go -------------------------------------------------------------------------------- /internal/infra/observability/metric/endpoint_metric/adapter.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/observability/metric/endpoint_metric/adapter.go -------------------------------------------------------------------------------- /internal/infra/observability/metric/endpoint_metric/metric.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/observability/metric/endpoint_metric/metric.go -------------------------------------------------------------------------------- /internal/infra/observability/metric/endpoint_metric/registry.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/observability/metric/endpoint_metric/registry.go -------------------------------------------------------------------------------- /internal/infra/observability/metric/job_metric/notification_job_metric/metric.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/observability/metric/job_metric/notification_job_metric/metric.go -------------------------------------------------------------------------------- /internal/infra/observability/metric/job_metric/notification_job_metric/registry.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/observability/metric/job_metric/notification_job_metric/registry.go -------------------------------------------------------------------------------- /internal/infra/observability/metric/metric.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/observability/metric/metric.go -------------------------------------------------------------------------------- /internal/infra/swagger.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/swagger.go -------------------------------------------------------------------------------- /internal/infra/transport/rest/endpoint/endpoint.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/transport/rest/endpoint/endpoint.go -------------------------------------------------------------------------------- /internal/infra/transport/rest/endpoint/v1/cancel_notification_endpoint.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/transport/rest/endpoint/v1/cancel_notification_endpoint.go -------------------------------------------------------------------------------- /internal/infra/transport/rest/endpoint/v1/create_communication_channel_endpoint.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/transport/rest/endpoint/v1/create_communication_channel_endpoint.go -------------------------------------------------------------------------------- /internal/infra/transport/rest/endpoint/v1/get_notification_endpoint.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/transport/rest/endpoint/v1/get_notification_endpoint.go -------------------------------------------------------------------------------- /internal/infra/transport/rest/endpoint/v1/handler.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/transport/rest/endpoint/v1/handler.go -------------------------------------------------------------------------------- /internal/infra/transport/rest/endpoint/v1/schedule_notification_endpoint.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/transport/rest/endpoint/v1/schedule_notification_endpoint.go -------------------------------------------------------------------------------- /internal/infra/transport/rest/endpoint/v1/welcome_endpoint.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/transport/rest/endpoint/v1/welcome_endpoint.go -------------------------------------------------------------------------------- /internal/infra/transport/rest/response.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/transport/rest/response.go -------------------------------------------------------------------------------- /internal/infra/transport/rest/server.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/internal/infra/transport/rest/server.go -------------------------------------------------------------------------------- /ops/grafana/provisioning/dashboards/dashboards.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/ops/grafana/provisioning/dashboards/dashboards.yml -------------------------------------------------------------------------------- /ops/grafana/provisioning/dashboards/push.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/ops/grafana/provisioning/dashboards/push.json -------------------------------------------------------------------------------- /ops/grafana/provisioning/datasources/datasource.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/ops/grafana/provisioning/datasources/datasource.yml -------------------------------------------------------------------------------- /ops/prometheus/prometheus.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/ops/prometheus/prometheus.yml -------------------------------------------------------------------------------- /pkg/dispatcher/simulation_dispatcher.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/pkg/dispatcher/simulation_dispatcher.go -------------------------------------------------------------------------------- /pkg/mongodb/connection.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/pkg/mongodb/connection.go -------------------------------------------------------------------------------- /test/container/mongo.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/test/container/mongo.go -------------------------------------------------------------------------------- /test/container/mongo_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/test/container/mongo_test.go -------------------------------------------------------------------------------- /test/factory/make_communication_channel.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/test/factory/make_communication_channel.go -------------------------------------------------------------------------------- /test/factory/make_notification.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/test/factory/make_notification.go -------------------------------------------------------------------------------- /test/fake/dispatcher.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/test/fake/dispatcher.go -------------------------------------------------------------------------------- /test/inmemory/inmemory_communication_channel_repository.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/test/inmemory/inmemory_communication_channel_repository.go -------------------------------------------------------------------------------- /test/inmemory/inmemory_notification_repository.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/test/inmemory/inmemory_notification_repository.go -------------------------------------------------------------------------------- /test/integration/helper/http_helper.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/test/integration/helper/http_helper.go -------------------------------------------------------------------------------- /test/integration/setup_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/test/integration/setup_test.go -------------------------------------------------------------------------------- /test/integration/v1_cancel_notification_endpoint_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/test/integration/v1_cancel_notification_endpoint_test.go -------------------------------------------------------------------------------- /test/integration/v1_create_communication_channel_endpoint_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/test/integration/v1_create_communication_channel_endpoint_test.go -------------------------------------------------------------------------------- /test/integration/v1_get_notification_endpoint_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/test/integration/v1_get_notification_endpoint_test.go -------------------------------------------------------------------------------- /test/integration/v1_schedule_notification_endpoint_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charmingruby/push/HEAD/test/integration/v1_schedule_notification_endpoint_test.go --------------------------------------------------------------------------------