Browse Source
			
			
			
			
				
		Currently, favorites are tracked at the cipher level. For org-owned ciphers, this means that if one user sets it as a favorite, it automatically becomes a favorite for all other users that the cipher has been shared with.pull/1106/head
				 12 changed files with 178 additions and 8 deletions
			
			
		| @ -0,0 +1,4 @@ | |||||
|  | DROP TABLE favorites; | ||||
|  | 
 | ||||
|  | ALTER TABLE ciphers | ||||
|  | ADD COLUMN favorite BOOLEAN NOT NULL; | ||||
| @ -0,0 +1,9 @@ | |||||
|  | CREATE TABLE favorites ( | ||||
|  |   user_uuid   CHAR(36) NOT NULL REFERENCES users(uuid), | ||||
|  |   cipher_uuid CHAR(36) NOT NULL REFERENCES ciphers(uuid), | ||||
|  | 
 | ||||
|  |   PRIMARY KEY (user_uuid, cipher_uuid) | ||||
|  | ); | ||||
|  | 
 | ||||
|  | ALTER TABLE ciphers | ||||
|  | DROP COLUMN favorite; | ||||
| @ -0,0 +1,4 @@ | |||||
|  | DROP TABLE favorites; | ||||
|  | 
 | ||||
|  | ALTER TABLE ciphers | ||||
|  | ADD COLUMN favorite BOOLEAN NOT NULL; | ||||
| @ -0,0 +1,9 @@ | |||||
|  | CREATE TABLE favorites ( | ||||
|  |   user_uuid   VARCHAR(40) NOT NULL REFERENCES users(uuid), | ||||
|  |   cipher_uuid VARCHAR(40) NOT NULL REFERENCES ciphers(uuid), | ||||
|  | 
 | ||||
|  |   PRIMARY KEY (user_uuid, cipher_uuid) | ||||
|  | ); | ||||
|  | 
 | ||||
|  | ALTER TABLE ciphers | ||||
|  | DROP COLUMN favorite; | ||||
| @ -0,0 +1,4 @@ | |||||
|  | DROP TABLE favorites; | ||||
|  | 
 | ||||
|  | ALTER TABLE ciphers | ||||
|  | ADD COLUMN favorite BOOLEAN NOT NULL; | ||||
| @ -0,0 +1,64 @@ | |||||
|  | CREATE TABLE favorites ( | ||||
|  |   user_uuid   TEXT NOT NULL REFERENCES users(uuid), | ||||
|  |   cipher_uuid TEXT NOT NULL REFERENCES ciphers(uuid), | ||||
|  | 
 | ||||
|  |   PRIMARY KEY (user_uuid, cipher_uuid) | ||||
|  | ); | ||||
|  | 
 | ||||
|  | -- Drop the `favorite` column from the `ciphers` table, using the 12-step | ||||
|  | -- procedure from <https://www.sqlite.org/lang_altertable.html#altertabrename>. | ||||
|  | -- Note that some steps aren't applicable and are omitted. | ||||
|  | 
 | ||||
|  | -- 1. If foreign key constraints are enabled, disable them using PRAGMA foreign_keys=OFF. | ||||
|  | -- | ||||
|  | -- Diesel runs each migration in its own transaction. `PRAGMA foreign_keys` | ||||
|  | -- is a no-op within a transaction, so this step must be done outside of this | ||||
|  | -- file, before starting the Diesel migrations. | ||||
|  | 
 | ||||
|  | -- 2. Start a transaction. | ||||
|  | -- | ||||
|  | -- Diesel already runs each migration in its own transaction. | ||||
|  | 
 | ||||
|  | -- 4. Use CREATE TABLE to construct a new table "new_X" that is in the | ||||
|  | --    desired revised format of table X. Make sure that the name "new_X" does | ||||
|  | --    not collide with any existing table name, of course. | ||||
|  | 
 | ||||
|  | CREATE TABLE new_ciphers( | ||||
|  |   uuid              TEXT     NOT NULL PRIMARY KEY, | ||||
|  |   created_at        DATETIME NOT NULL, | ||||
|  |   updated_at        DATETIME NOT NULL, | ||||
|  |   user_uuid         TEXT     REFERENCES users(uuid), | ||||
|  |   organization_uuid TEXT     REFERENCES organizations(uuid), | ||||
|  |   atype             INTEGER  NOT NULL, | ||||
|  |   name              TEXT     NOT NULL, | ||||
|  |   notes             TEXT, | ||||
|  |   fields            TEXT, | ||||
|  |   data              TEXT     NOT NULL, | ||||
|  |   password_history  TEXT, | ||||
|  |   deleted_at        DATETIME | ||||
|  | ); | ||||
|  | 
 | ||||
|  | -- 5. Transfer content from X into new_X using a statement like: | ||||
|  | --    INSERT INTO new_X SELECT ... FROM X. | ||||
|  | 
 | ||||
|  | INSERT INTO new_ciphers(uuid, created_at, updated_at, user_uuid, organization_uuid, atype, | ||||
|  |                         name, notes, fields, data, password_history, deleted_at) | ||||
|  | SELECT uuid, created_at, updated_at, user_uuid, organization_uuid, atype, | ||||
|  |        name, notes, fields, data, password_history, deleted_at | ||||
|  | FROM ciphers; | ||||
|  | 
 | ||||
|  | -- 6. Drop the old table X: DROP TABLE X. | ||||
|  | 
 | ||||
|  | DROP TABLE ciphers; | ||||
|  | 
 | ||||
|  | -- 7. Change the name of new_X to X using: ALTER TABLE new_X RENAME TO X. | ||||
|  | 
 | ||||
|  | ALTER TABLE new_ciphers RENAME TO ciphers; | ||||
|  | 
 | ||||
|  | -- 11. Commit the transaction started in step 2. | ||||
|  | 
 | ||||
|  | -- 12. If foreign keys constraints were originally enabled, reenable them now. | ||||
|  | -- | ||||
|  | -- `PRAGMA foreign_keys` is scoped to a database connection, and Diesel | ||||
|  | -- migrations are run in a separate database connection that is closed once | ||||
|  | -- the migrations finish. | ||||
					Loading…
					
					
				
		Reference in new issue