From 7c71510f21489d93763c04db8507b0dc5c5e2e66 Mon Sep 17 00:00:00 2001 From: Chris Molozian Date: Tue, 29 Dec 2020 16:25:03 +0000 Subject: [PATCH] Add SQL schema to store push tokens and IAP receipts. (#518) --- migrate/a_migrate-packr.go | 4 +- migrate/sql/20180805174141-tournaments.sql | 6 +-- migrate/sql/20201005180855-console.sql | 47 ++++++++++++++++++---- server/console_authenticate.go | 2 +- server/console_user.go | 6 +-- 5 files changed, 49 insertions(+), 16 deletions(-) diff --git a/migrate/a_migrate-packr.go b/migrate/a_migrate-packr.go index 999419087..89c5bf1f2 100644 --- a/migrate/a_migrate-packr.go +++ b/migrate/a_migrate-packr.go @@ -8,8 +8,8 @@ import "github.com/gobuffalo/packr" // and any other packr generated files. func init() { _ = packr.PackJSONBytes("./sql", "20180103142001_initial_schema.sql", "\"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\"") - _ = packr.PackJSONBytes("./sql", "20180805174141-tournaments.sql", "\"H4sIAAAAAAAA/5RUXW+jRhR951cc+SXJFtsk0qrtWo1EbKKgJbAyeD/6giZwg6eFGTqMi91fX4GNP+Ks46C8xHPOuWfO3HuHHwx8wFiWK8WzucaNdf0bojnBZ3+zgsFe6LlUlYEW5/GEREUpFiIlBT0n2CVL5tSdmPhKquJS4GZg4bIB9DZHvatRI7GSCxRsBSE1FhVBz3mFZ54TaJlQqcEFElmUOWciIdRcz9s6G5VBo/FjoyGfNOMCDIksV5DP+0AwvTE917r8NBzWdT1grdmBVNkwX8OqoeeOHT90+jcDa0OYiZyqCor+WXBFKZ5WYGWZ84Q95YSc1ZAKLFNEKbRsDNeKay4yE5V81jVT1MikvNKKPy30QV6dPV4dAKQAE+jZIdywhzs7dEOzEfnmRg/BLMI3ezq1/ch1QgRTjAN/4kZu4IcI7mH7P/DZ9ScmiOs5KdCyVM0NpAJvkqS0jS0kOrDwLNeWqpIS/swT5ExkC5YRMvkvKcFFhpJUwavmRSswkTYyOS+4Zrr96eheTaGhYfT7+KXgmWKaMCsN24ucKSL7znOQE0tJPUmmUgMA7MkE48CbPfpImKZMqhXaL3y0Pc/1o/YfP4jgzzwPE+fennkRLIwfnPFnXG5Jt3/AujJfaqZUJYqXjV0AX+3p+MGeXt58/Hh1rHlxcUxfKLbhAujcvGFpS1pbQr/fNElFiRRpNXhZgkQaa17QWjVyH50wsh+/RH++UuLi+vdfrb513beuYVmf2j/MovGx8b8kF/G2he+CwHNs/yfG720vdI4UCraMK/4fnXP1a2vzdRFsybevPUpzKhZFXCVS0XnS+8I76m2Xb8GWYHkua0qxPmJaU1Hq47w11zlt6727I3aRnNERx2zNlN4+9+nHFrK+vBoZP5ueWFEij4foONv3RzoyjPHUsSMHrj9xvsO9b0Wc724YhduZiHeXibsmjrtxjHm6RODvG94NhrmXg7kbgIkTjs3tFrganTIha0Eq5mlMy5Kr1br4fjo8fcXCJjNcdnQTe3wThwJNDvubbCJrYUymwZedo/dGMnqdf+ZtXjTDjv9yqbZFNg2xQ/U6Jz3zBGpvY56EdW95AtNFcApzsKhOAbuV8hZm28qngO0SOAV4q9Luoc95lP1ZPcP5yPg/AAD//ynPIhaYCQAA\"") + _ = packr.PackJSONBytes("./sql", "20180805174141-tournaments.sql", "\"H4sIAAAAAAAA/5RUXW+jRhR951cc+WWTLbZJpFXbtRqJ2ERBS2Bl8H70BU3gxp4WZugwLnZ/fQU2/ogT4qC8xHPOuWfO3HuHHw18xFgWa8XnC41r6+o3RAuCz/5mOYO91AupSgMNzuMJiZJSLEVKCnpBsAuWLKg9MfGNVMmlwPXAwkUN6G2PepejWmItl8jZGkJqLEuCXvASTzwj0CqhQoMLJDIvMs5EQqi4XjR1tiqDWuPnVkM+asYFGBJZrCGfDoFgemt6oXXxeTisqmrAGrMDqebDbAMrh547dvzQ6V8PrC1hJjIqSyj6Z8kVpXhcgxVFxhP2mBEyVkEqsLkiSqFlbbhSXHMxN1HKJ10xRbVMykut+ONSH+XV2uPlEUAKMIGeHcINe7i1Qzc0a5HvbnQfzCJ8t6dT249cJ0QwxTjwJ27kBn6I4A62/xNfXH9igrhekAKtClXfQCrwOklKm9hCoiMLT3JjqSwo4U88QcbEfMnmhLn8l5TgYo6CVM7L+kVLMJHWMhnPuWa6+enkXnWhoWH0+/gl53PFNGFWGLYXOVNE9q3nICOWknqUTKUGANiTCcaBN3vwkTBNc6nWaL7wwfY814+af/wggj/zPEycO3vmRbAwvnfGX3CxI938AevSfK6ZUpkoXtR2AXyzp+N7e3px/enT5anmhw+n9KViWy6A1s0blnakjSX0+3WTlJRIkZaD5yVIpLHmOW1UI/fBCSP74Wv05wslPlz9/qvVt6761hUs63Pzh1k0PjX+l+Qi3rXwbRB4ju2/YvzO9kLnRCFnq7jk/9E5V7+ytl8bwY5889Kj1KdimcdlIhWdJ30ovKfetPnmbAWWZbKiFJsjpjXlhT7NW3Od0a7euztiH8kZHXHK1kzp3XN3P7aQ1cXlyHhtemJFiTwdotNs3x/pyDDGU8eOHLj+xPkB964RcX64YRTuZiLeXyZumzhuxzHm6QqBf2h4PxjmQQ7mfgAmTjg2d1vgctRlQlaCVMzTmFYFV+tN8cN0ePqChW1muGjpJg74Jo4F6hwON9lEVsKYTIOve0fvjWT0Mv/M2zxrhj3/lbZoam37Yg8+eu9zJDu0eu3lemYH6mAJd8La9ujAtKl2YY52Xxew3VJvYXZpdQGbvdIFeKvSvndGxv8BAAD//0tV23CYCQAA\"") _ = packr.PackJSONBytes("./sql", "20200116134800-facebook-instant-games.sql", "\"H4sIAAAAAAAA/3SSQW+bQBCF7/4VTz4lqWO7PlXNidhEQXWhBZw0p2gMA4wCu3R3KfG/r9ZxpFpVrszje2/e7OJqgiusdX8wUjcOq+VqibxhxPRCHSEYXKONneCo20rBynKJQZVs4BpG0FPR8Ptkhgc2VrTCar7EhRdMT6Pp5Y1HHPSAjg5Q2mGwDNeIRSUtg18L7h1EodBd3wqpgjGKa44+J8rcM55ODL13JAqEQvcH6OpfIcidQjfO9V8Xi3Ec53QMO9emXrRvMrvYRuswzsLr1Xx5+mGnWrYWhn8PYrjE/gDq+1YK2reMlkZoA6oNcwmnfeDRiBNVz2B15UYy7DGlWGdkP7izvt7jiT0TaAVSmAYZomyK2yCLspmHPEb5fbLL8RikaRDnUZghSbFO4k2UR0mcIblDED/hWxRvZmBxDRvwa2/8BtpAfJNcHmvLmM8iVPotku25kEoKtKTqgWpGrf+wUaJq9Gw6sf6iFqRKj2mlE0fu+Om/vbzRYjK5vsanTmpDjrHrJ8E2D1Pkwe029Ef37wlAsNlgnWx332NUVPBe65dnUdaRcs81dfwsJR6CdH0fpBefV18usYujn7vw5hy/0aP6wGCTJj/eHaI7hL+iLM8+9LqZ/A0AAP//Ai+1XA0DAAA=\"") _ = packr.PackJSONBytes("./sql", "20200615102232-apple.sql", "\"H4sIAAAAAAAA/3SSQXPTMBCF7/kVb3JqS5qEnBh6UhN36iHYYDstPTGKvbF3sCUhybj594zchCHDcNU+ffv27S5uJrjBWpuj5brxWC1XSxQNIZE/ZCchet9o6yYYdVsuSTmq0KuKLHxDEEaWDZ0rMzyRdawVVvMlroJgeipNr+8C4qh7dPIIpT16R/ANOxy4JdBrScaDFUrdmZalKgkD+2bsc6LMA+PlxNB7L1lBotTmCH34WwjpT6Yb783HxWIYhrkczc61rRftm8wttvE6SvLodjVfnj7sVEvOwdLPni1V2B8hjWm5lPuW0MoB2kLWlqiC18HwYNmzqmdw+uAHaSlgKnbe8r73F3md7bG7EGgFqTAVOeJ8inuRx/ksQJ7j4jHdFXgWWSaSIo5ypBnWabKJizhNcqQPEMkLPsXJZgZi35AFvRobJtAWHJKkaowtJ7qwcNBvlpyhkg9copWq7mVNqPUvsopVDUO2Yxc26iBVFTAtd+ylH5/+mSs0Wkwmt7d413FtpSfszERsiyhDIe63UVh6uCcAYrPBOt3uPidjvvSdKzyJbP0osqv3qw/X2CXx1110d4nb6EH9B7jJ0i9nYvyA6FucF/kf9t3kdwAAAP//oiQc7u0CAAA=\"") - _ = packr.PackJSONBytes("./sql", "20201005180855-console.sql", "\"H4sIAAAAAAAA/5yTX2/bNhTF3/UpDvISqZNjxW2xrdkGKLaCaHHkTH/aZS8BI11LxCRSJamqxrDvPlC202Yt+lDDLyLP+d1zL8n5CwcvsJT9TvG6MVgEiwB5Q0jY36xjCAfTSKUdTLo1L0loqjCIihRMQwh7VjZ03PHxlpTmUmBxFsC1gpPD1ol3YRE7OaBjOwhpMGiCabjGlrcE+lhSb8AFStn1LWeiJIzcNFOdA+XMMu4PDPloGBdgKGW/g9x+LgQzh9CNMf2b+XwcxzM2hT2Tqp63e5mer+NllGTRbHEWHAyFaElrKHo/cEUVHndgfd/ykj22hJaNkAqsVkQVjLSBR8UNF7UPLbdmZIospuLaKP44mGfzOsbj+plACjCBkzBDnJ3gMszizLeQd3F+vSlyvAvTNEzyOMqwSbHcJKs4jzdJhs0VwuQeN3Gy8kHcNKRAH3tlO5AK3E6SqmlsGdGzCFu5j6R7KvmWl2iZqAdWE2r5gZTgokZPquPanqgGE5XFtLzjhplp6Yu+bKG548xm+KHjtWKGUPTOMo3CPEIeXq4jxFdINjmiP+Msz1BKoWVLD4MmpeE6AHCXxrdheo+b6B4urzzfmZZ5hU+/oohXTx+WlxTrtT/pLEqwjqatt2G6vA5T93zxk/ekswPM8jSMk3xS64ej52EQ/D2KJP6jiPY06hhvj4WOtMXr19+iTZ4vUT3TepRq38blfR6FR+7yOlrewG1J1KZxjzoPv+DlIggCb+9XsqWnnrPbcL22JT8fAFbRVVisc7w6IifPb7/i3PMxm2EQg6bKDTwfrOq4cO16RR+olT0pd+H56BgX9l2Rcl96PhSxSop2577yphAdGVYxw6a6v2eb5PL/p/AU4vSff0/3yUtFzNCD4fZU8vg2yvLw9i7/6ysmIUf30O/QV9/hqri2D3Vv+7br9PznH4NZcD4LzhEEb6Y/inx56ngXzy/xSo7CWaWbu0+X+GsX+ML5LwAA//+fJNwMUQUAAA==\"") + _ = packr.PackJSONBytes("./sql", "20201005180855-console.sql", "\"H4sIAAAAAAAA/6xWUXObRhB+16/Y8UsgRTZSkmkbt5nB6JzQyOACSuK+MGdYi5vAHbk7QtRO/3sHBJYly46cKeMXc99+++3utydOno/gObiiWkm2zDVM7akNcY7g08+0pODUOhdSjaDDzVmKXGEGNc9Qgs4RnIqmOQ4nFnxAqZjgMD22wWgBR/3RkXnaUqxEDSVdARcaaoWgc6bghhUI+C3FSgPjkIqyKhjlKULDdN7l6VmOW46rnkNca8o4UEhFtQJxcxcIVPeic62r1ycnTdMc007ssZDLk2INUydzzyV+RMbTY7sPWPAClQKJX2omMYPrFdCqKlhKrwuEgjYgJNClRMxAi1ZwI5lmfGmBEje6oRJbmowpLdl1rbf6NchjagsgOFAOR04EXnQEZ07kRVZL8tGL3wWLGD46Yej4sUciCEJwA3/mxV7gRxCcg+NfwXvPn1mATOcoAb9Vsq1ASGBtJzHr2hYhbkm4EWtJqsKU3bAUCsqXNV0iLMVXlJzxJVQoS6baiSqgPGtpClYyTXX36l5dbaKT0Wg8hp9KtpRUIyyqkRsSJyYQO2dzAt45+EEM5JMXxRGkgitRYFIrlGCMAAAuQ+/CCa/gPbkCg2WmNepepxKpxkSzEgFi74JEsXNxGf8FHZ2/mM9hRs6dxTwGLhrDtLqojKl2bOuwx6OeTX792R7bk7E9Adt+3f3BInafrZmwpKyA/vnghO47JzSmr16ZGyY38KM4dDw/3qor6UKTmrMvsPC9Pxdkzcgy2DyLhTe7/WdgXONK1DSjmnZHf0SBf7aL29Twz7+93Ioq1Qi5TnF2FRNnCHLfEfc9GAXypc6NAWfCb/Biatt23zgpCrzVE10483lb1t6kLwfKLubN7zAxLRiPoea1wsywTQtoVjJutO8z/IqFqFAaU9OCkjLeLjFK44VpgUSaCV6sjJdmJ6Kush+YedtzTkvcmtRk+ssBkxpC7w5rZJ6OHrNwVcs0pwoTiSmySu+zcX/UCzwPQuK99ddHXV6WmRCScxIS3yVRV4HqzA+BDzMyJzEBPwDHbbd+30I8oT2VFFmd6qS339CgV5OpuWO828qeOABJm0SiqkR7zRxu2aF//ROTT/G9jdhx79BXeAODcZUWcuPc71jX7ozqVFWBTlVFbWjn17dCLAu8LOjKmKytqCXliqbtvdd2bm/XdsRth9zVuOXrJzo72Vwbe++M1q69Wz1/Rj59x61Jz5lsDTvZ1p6w7FsnIPD32L1nsHb8MiORa+30rV0lZx6TsN+kLjTDryzFjt+ZzcAN5osLf1e2xBuUyFNUQ8GH2uphzlrliRafkSe0pH8L/sAybDifwsgzKR40yo8w5jVtkP2fGplQD18BP8TY4PVBjKfb3wgz0fBHfTELg8s7ye+bwnoMtjvnQ8HrER6IXo/nQDAThypu8Pp0NOpgtz8+e76drHt7eTr6LwAA///MH2B13QsAAA==\"") } diff --git a/migrate/sql/20180805174141-tournaments.sql b/migrate/sql/20180805174141-tournaments.sql index 8ca651045..a3f4e3665 100644 --- a/migrate/sql/20180805174141-tournaments.sql +++ b/migrate/sql/20180805174141-tournaments.sql @@ -37,6 +37,9 @@ CREATE INDEX IF NOT EXISTS owner_id_expiry_time_leaderboard_id_idx ON leaderboar DROP INDEX IF EXISTS duration_start_time_end_time_category_idx; DROP INDEX IF EXISTS owner_id_expiry_time_leaderboard_id_idx; +ALTER TABLE IF EXISTS leaderboard_record + DROP COLUMN IF EXISTS max_num_score; + ALTER TABLE IF EXISTS leaderboard DROP COLUMN IF EXISTS "category", DROP COLUMN IF EXISTS description, @@ -48,6 +51,3 @@ ALTER TABLE IF EXISTS leaderboard DROP COLUMN IF EXISTS title, DROP COLUMN IF EXISTS size, DROP COLUMN IF EXISTS start_time; - -ALTER TABLE IF EXISTS leaderboard_record - DROP COLUMN IF EXISTS max_num_score; diff --git a/migrate/sql/20201005180855-console.sql b/migrate/sql/20201005180855-console.sql index db38b941a..8220a6e46 100644 --- a/migrate/sql/20201005180855-console.sql +++ b/migrate/sql/20201005180855-console.sql @@ -15,19 +15,52 @@ */ -- +migrate Up -CREATE TABLE IF NOT EXISTS console_users ( +CREATE TABLE IF NOT EXISTS console_user ( PRIMARY KEY (id), + create_time TIMESTAMPTZ NOT NULL DEFAULT now(), + disable_time TIMESTAMPTZ NOT NULL DEFAULT '1970-01-01 00:00:00 UTC', + email VARCHAR(255) NOT NULL CONSTRAINT console_user_email_uniq UNIQUE, id UUID NOT NULL, - username VARCHAR(128) NOT NULL CONSTRAINT users_username_uniq UNIQUE, - email VARCHAR(255) NOT NULL CONSTRAINT users_email_uniq UNIQUE, + metadata JSONB NOT NULL DEFAULT '{}', password BYTEA CHECK (length(password) < 32000), role SMALLINT NOT NULL DEFAULT 4 CHECK (role >= 1), -- unused(0), admin(1), developer(2), maintainer(3), readonly(4) - metadata JSONB NOT NULL DEFAULT '{}', - create_time TIMESTAMPTZ NOT NULL DEFAULT now(), update_time TIMESTAMPTZ NOT NULL DEFAULT now(), - disable_time TIMESTAMPTZ NOT NULL DEFAULT '1970-01-01 00:00:00 UTC' + username VARCHAR(128) NOT NULL CONSTRAINT console_user_username_uniq UNIQUE ); +CREATE TABLE IF NOT EXISTS purchase_receipt ( + PRIMARY KEY (receipt), + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE NO ACTION, + + create_time TIMESTAMPTZ NOT NULL DEFAULT now(), + product_id VARCHAR(512) NOT NULL, + purchase_time TIMESTAMPTZ NOT NULL DEFAULT now(), + raw_response JSONB NOT NULL DEFAULT '{}', + receipt TEXT NOT NULL CHECK (length(receipt) > 0), + store SMALLINT NOT NULL DEFAULT 0, -- AppleAppStore(0), GooglePlay(1) + transaction_id VARCHAR(512) NOT NULL CHECK (length(transaction_id) > 0), + update_time TIMESTAMPTZ NOT NULL DEFAULT now(), + user_id UUID NOT NULL +); +CREATE INDEX IF NOT EXISTS purchase_receipt_user_id_purchase_time_transaction_id_idx + ON purchase_receipt (user_id, purchase_time DESC, transaction_id); + +ALTER TABLE user_device + ADD COLUMN IF NOT EXISTS preferences JSONB NOT NULL DEFAULT '{}', + ADD COLUMN IF NOT EXISTS push_token_amazon VARCHAR(512) NOT NULL DEFAULT '', + ADD COLUMN IF NOT EXISTS push_token_android VARCHAR(512) NOT NULL DEFAULT '', + ADD COLUMN IF NOT EXISTS push_token_huawei VARCHAR(512) NOT NULL DEFAULT '', + ADD COLUMN IF NOT EXISTS push_token_ios VARCHAR(512) NOT NULL DEFAULT '', + ADD COLUMN IF NOT EXISTS push_token_web VARCHAR(512) NOT NULL DEFAULT ''; + -- +migrate Down -DROP TABLE IF EXISTS console_users; +ALTER TABLE user_device + DROP COLUMN IF EXISTS preferences, + DROP COLUMN IF EXISTS push_token_amazon, + DROP COLUMN IF EXISTS push_token_android, + DROP COLUMN IF EXISTS push_token_huawei, + DROP COLUMN IF EXISTS push_token_ios, + DROP COLUMN IF EXISTS push_token_web; + +DROP TABLE IF EXISTS console_user, purchase_receipt; diff --git a/server/console_authenticate.go b/server/console_authenticate.go index 75a6c0bf6..be127a686 100644 --- a/server/console_authenticate.go +++ b/server/console_authenticate.go @@ -103,7 +103,7 @@ func (s *ConsoleServer) Authenticate(ctx context.Context, in *console.Authentica func (s *ConsoleServer) lookupConsoleUser(ctx context.Context, unameOrEmail, password string) (uname string, email string, role console.UserRole, err error) { role = console.UserRole_USER_ROLE_UNKNOWN - query := "SELECT username, email, role, password, disable_time FROM console_users WHERE username = $1 OR email = $1" + query := "SELECT username, email, role, password, disable_time FROM console_user WHERE username = $1 OR email = $1" var dbPassword []byte var dbDisableTime pgtype.Timestamptz err = s.db.QueryRowContext(ctx, query, unameOrEmail).Scan(&uname, &email, &role, &dbPassword, &dbDisableTime) diff --git a/server/console_user.go b/server/console_user.go index 98a56b6b4..1d67fab9b 100644 --- a/server/console_user.go +++ b/server/console_user.go @@ -69,7 +69,7 @@ func (s *ConsoleServer) dbInsertConsoleUser(ctx context.Context, in *console.Add if err != nil { return false, err } - query := "INSERT INTO console_users (id, username, email, password, role) VALUES ($1, $2, $3, $4, $5)" + query := "INSERT INTO console_user (id, username, email, password, role) VALUES ($1, $2, $3, $4, $5)" _, err = s.db.ExecContext(ctx, query, id.String(), in.Username, in.Email, hashedPassword, in.Role) if err != nil { if perr, is := err.(pgx.PgError); is { @@ -105,7 +105,7 @@ func (s *ConsoleServer) ListUsers(ctx context.Context, in *empty.Empty) (*consol func (s *ConsoleServer) dbListConsoleUsers(ctx context.Context) ([]*console.UserList_User, error) { result := make([]*console.UserList_User, 0) - rows, err := s.db.QueryContext(ctx, "SELECT username, email, role FROM console_users") + rows, err := s.db.QueryContext(ctx, "SELECT username, email, role FROM console_user") if err != nil { return nil, err } @@ -120,7 +120,7 @@ func (s *ConsoleServer) dbListConsoleUsers(ctx context.Context) ([]*console.User } func (s *ConsoleServer) dbDeleteConsoleUser(ctx context.Context, username string) (bool, error) { - res, err := s.db.ExecContext(ctx, "DELETE FROM console_users WHERE username = $1", username) + res, err := s.db.ExecContext(ctx, "DELETE FROM console_user WHERE username = $1", username) if err != nil { return false, err } -- GitLab