ducky/subscriptions

Paddy 2015-07-13 Parent:f1a22fc2321d

8:61583c1d3886 Go to Latest

ducky/subscriptions/postgres.go

Create a listener that will create subscriptions. We need a listener (as discussed in c4cfceb2f2fb) that will create a Subscription whenever an auth.Profile is created. This is the beginning of that effort. It hasn't been tested, and all the pieces aren't in place, but it's a rough skeleton. We have a Dockerfile that will correctly build a minimal container for the listener. We have a build-docker.sh script that will correctly build a binary that will be used in the Dockerfile. We have a ca-certificates.crt, which are pulled from Ubuntu, and are necessary before we can safely consume SSL endpoints. We created a small consumer script that listens for events off NSQ, and calls the appropriate endpoint for our Subscriptions API. This is untested, and it doesn't build at the moment, but that's awaiting changes in the code.secondbit.org/auth.hg package. Finally, we have a wrapper.sh file that will expose the Stripe secret key being used from a Kubernetes secret file as an environment variable, instead.

History
paddy@1 1 package subscriptions
paddy@1 2
paddy@1 3 import (
paddy@1 4 "database/sql"
paddy@1 5 )
paddy@1 6
paddy@1 7 // NewPostgres returns a usable Postgres instance, if and only
paddy@1 8 // if error is nil. If error is not nil, the returned Postgres
paddy@1 9 // instance should not be used.
paddy@1 10 func NewPostgres(conn string) (Postgres, error) {
paddy@1 11 db, err := sql.Open("postgres", conn)
paddy@1 12 if err != nil {
paddy@1 13 return Postgres{}, err
paddy@1 14 }
paddy@1 15 return Postgres{db}, nil
paddy@1 16 }
paddy@1 17
paddy@1 18 // Postgres represents a thin wrapper around *sql.DB, so we can
paddy@1 19 // inherit its methods but also define our own (so we can fulfill
paddy@1 20 // our subscriptionStore interface on Postgres). Note that the
paddy@1 21 // value of a Postgres variable contains a _pointer_ to an sql.DB
paddy@1 22 // pool of connections, so it's not necessary to use the address of
paddy@1 23 // the Postgres variable itself (though there shouldn't be any harm
paddy@1 24 // in doing so).
paddy@1 25 type Postgres struct {
paddy@1 26 *sql.DB
paddy@1 27 }