/conduit

Real world app (medium clone) backend implemented in Go

Primary LanguageGoMIT LicenseMIT

conduit

Real world app (Medium clone) backend implemented in Go

Get started

make up

This will create Postgres db, apply migrations and run API server - all via docker-compose.

TODO

[x] Make middleware for user auth to simplify handlers [x] User handlers [x] Article handlers [x] Move service logic out of handlers to the service [x] mock: Create test users in mock.NewUserStore constructor, expose test users in mock package [x] Merge user/ subpackages into one "user" package. So we can avoid stupid types like service.Service and server.Server

[x] Implement profile service (follow/unfollow). It's required to implement articles feed. [x] Migrate service/article to "articles" package. Add article methods to postgres store. [x] Delete ./service/ and ./store/ [x] Fix cli util

[x] Create predefined errors. Merge all .../error.go into app/error.go

[ ] Write functional tests

[ ] Rewrite HTTP statuses to match API spec [ ] Configure linters [ ] Move to Gin [ ] Remove down migrations [ ] Move migrations to the store [ ] Get rid of sql builder where it's not needed (except update methods) [ ] Make custom lower snake case marshaller in local json package and remove json struct tags because they spoil types. https://gist.github.com/Rican7/39a3dc10c1499384ca91 [x] Remove vendoring

Think about refactoring inspired by WTFDial:

  • Move service logic to the postgres package and merge it with queries. So service type is inside the postgres package.
  • Instead of passing user into service method pass the context. And also use this context for postgres queries.