000000003.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. package migrate
  2. import (
  3. "golang-fave/engine/sqlw"
  4. "golang-fave/utils"
  5. )
  6. func Migrate_000000003(db *sqlw.DB) error {
  7. // ALTER TABLE blog_cat_post_rel ADD KEY post_id (post_id);
  8. // ALTER TABLE blog_cat_post_rel ADD KEY category_id (category_id);
  9. // Remove blog indexes
  10. if _, err := db.Exec(`DROP INDEX post_id ON blog_cat_post_rel`); err != nil {
  11. return err
  12. }
  13. if _, err := db.Exec(`DROP INDEX category_id ON blog_cat_post_rel`); err != nil {
  14. return err
  15. }
  16. // Table: shop_cat_product_rel
  17. if _, err := db.Exec(
  18. `CREATE TABLE shop_cat_product_rel (
  19. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  20. product_id int(11) NOT NULL COMMENT 'Product id',
  21. category_id int(11) NOT NULL COMMENT 'Category id',
  22. PRIMARY KEY (id)
  23. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  24. ); err != nil {
  25. return err
  26. }
  27. // Table: shop_cats
  28. if _, err := db.Exec(
  29. `CREATE TABLE shop_cats (
  30. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  31. user int(11) NOT NULL COMMENT 'User id',
  32. name varchar(255) NOT NULL COMMENT 'Category name',
  33. alias varchar(255) NOT NULL COMMENT 'Category alias',
  34. lft int(11) NOT NULL COMMENT 'For nested set model',
  35. rgt int(11) NOT NULL COMMENT 'For nested set model',
  36. PRIMARY KEY (id)
  37. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  38. ); err != nil {
  39. return err
  40. }
  41. // Table: shop_currencies
  42. if _, err := db.Exec(
  43. `CREATE TABLE shop_currencies (
  44. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  45. name varchar(255) NOT NULL COMMENT 'Currency name',
  46. coefficient float(8,4) NOT NULL DEFAULT '1.0000' COMMENT 'Currency coefficient',
  47. code varchar(10) NOT NULL COMMENT 'Currency code',
  48. symbol varchar(5) NOT NULL COMMENT 'Currency symbol',
  49. PRIMARY KEY (id)
  50. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  51. ); err != nil {
  52. return err
  53. }
  54. // Table: shop_filter_product_values
  55. if _, err := db.Exec(
  56. `CREATE TABLE shop_filter_product_values (
  57. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  58. product_id int(11) NOT NULL COMMENT 'Product id',
  59. filter_value_id int(11) NOT NULL COMMENT 'Filter value id',
  60. PRIMARY KEY (id)
  61. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  62. ); err != nil {
  63. return err
  64. }
  65. // Table: shop_filters
  66. if _, err := db.Exec(
  67. `CREATE TABLE shop_filters (
  68. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  69. name varchar(255) NOT NULL COMMENT 'Filter name in CP',
  70. filter varchar(255) NOT NULL COMMENT 'Filter name in site',
  71. PRIMARY KEY (id)
  72. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  73. ); err != nil {
  74. return err
  75. }
  76. // Table: shop_filters_values
  77. if _, err := db.Exec(
  78. `CREATE TABLE shop_filters_values (
  79. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  80. filter_id int(11) NOT NULL COMMENT 'Filter id',
  81. name varchar(255) NOT NULL COMMENT 'Value name',
  82. PRIMARY KEY (id)
  83. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  84. ); err != nil {
  85. return err
  86. }
  87. // Table: shop_products
  88. if _, err := db.Exec(
  89. `CREATE TABLE shop_products (
  90. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  91. user int(11) NOT NULL COMMENT 'User id',
  92. currency int(11) NOT NULL COMMENT 'Currency id',
  93. price float(8,2) NOT NULL COMMENT 'Product price',
  94. name varchar(255) NOT NULL COMMENT 'Product name',
  95. alias varchar(255) NOT NULL COMMENT 'Product alias',
  96. briefly text NOT NULL COMMENT 'Product brief content',
  97. content text NOT NULL COMMENT 'Product content',
  98. datetime datetime NOT NULL COMMENT 'Creation date/time',
  99. active int(1) NOT NULL COMMENT 'Is active product or not',
  100. PRIMARY KEY (id)
  101. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  102. ); err != nil {
  103. return err
  104. }
  105. // Demo datas
  106. if _, err := db.Exec(
  107. `INSERT INTO shop_cat_product_rel (id, product_id, category_id)
  108. VALUES
  109. (1, 1, 3);`,
  110. ); err != nil {
  111. return err
  112. }
  113. if _, err := db.Exec(
  114. `INSERT INTO shop_cats (id, user, name, alias, lft, rgt)
  115. VALUES
  116. (1, 1, 'ROOT', 'ROOT', 1, 6),
  117. (2, 1, 'Electronics', 'electronics', 2, 5),
  118. (3, 1, 'Mobile phones', 'mobile-phones', 3, 4);`,
  119. ); err != nil {
  120. return err
  121. }
  122. if _, err := db.Exec(
  123. `INSERT INTO shop_currencies (id, name, coefficient, code, symbol)
  124. VALUES
  125. (1, 'US Dollar', 1.0000, 'USD', '$');`,
  126. ); err != nil {
  127. return err
  128. }
  129. if _, err := db.Exec(
  130. `INSERT INTO shop_filter_product_values (id, product_id, filter_value_id)
  131. VALUES
  132. (1, 1, 3),
  133. (2, 1, 7),
  134. (3, 1, 9),
  135. (4, 1, 10),
  136. (5, 1, 11);`,
  137. ); err != nil {
  138. return err
  139. }
  140. if _, err := db.Exec(
  141. `INSERT INTO shop_filters (id, name, filter)
  142. VALUES
  143. (1, 'Mobile phones manufacturer', 'Manufacturer'),
  144. (2, 'Mobile phones memory', 'Memory'),
  145. (3, 'Mobile phones communication standard', 'Communication standard');`,
  146. ); err != nil {
  147. return err
  148. }
  149. if _, err := db.Exec(
  150. `INSERT INTO shop_filters_values (id, filter_id, name)
  151. VALUES
  152. (1, 1, 'Apple'),
  153. (2, 1, 'Asus'),
  154. (3, 1, 'Samsung'),
  155. (4, 2, '16 Gb'),
  156. (5, 2, '32 Gb'),
  157. (6, 2, '64 Gb'),
  158. (7, 2, '128 Gb'),
  159. (8, 2, '256 Gb'),
  160. (9, 3, '4G'),
  161. (10, 3, '2G'),
  162. (11, 3, '3G');`,
  163. ); err != nil {
  164. return err
  165. }
  166. if _, err := db.Exec(
  167. `INSERT INTO shop_products SET
  168. id = ?,
  169. user = ?,
  170. currency = ?,
  171. price = ?,
  172. name = ?,
  173. alias = ?,
  174. briefly = ?,
  175. content = ?,
  176. datetime = ?,
  177. active = ?
  178. ;`,
  179. 1,
  180. 1,
  181. 1,
  182. 1000.00,
  183. "Samsung Galaxy S10",
  184. "samsung-galaxy-s10",
  185. "<p>Arcu ac tortor dignissim convallis aenean et tortor. Vitae auctor eu augue ut lectus arcu. Ac turpis egestas integer eget aliquet nibh praesent. Interdum velit euismod in pellentesque massa placerat duis. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt. Nisl rhoncus mattis rhoncus urna neque viverra justo. Odio ut enim blandit volutpat. Ac auctor augue mauris augue neque gravida. Ut lectus arcu bibendum at varius vel. Porttitor leo a diam sollicitudin tempor id eu nisl nunc. Dolor sit amet consectetur adipiscing elit duis tristique. Semper quis lectus nulla at volutpat diam ut. Sapien eget mi proin sed.</p>",
  186. "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Feugiat in ante metus dictum at tempor commodo ullamcorper a. Et malesuada fames ac turpis egestas sed tempus urna et. Euismod elementum nisi quis eleifend. Nisi porta lorem mollis aliquam ut porttitor. Ac turpis egestas maecenas pharetra convallis posuere. Nunc non blandit massa enim nec dui. Commodo elit at imperdiet dui accumsan sit amet nulla. Viverra accumsan in nisl nisi scelerisque. Dui nunc mattis enim ut tellus. Molestie ac feugiat sed lectus vestibulum mattis ullamcorper. Faucibus ornare suspendisse sed nisi lacus. Nulla facilisi morbi tempus iaculis. Ut eu sem integer vitae justo eget magna fermentum iaculis. Ullamcorper sit amet risus nullam eget felis eget nunc. Volutpat sed cras ornare arcu dui vivamus. Eget magna fermentum iaculis eu non diam.</p><p>Arcu ac tortor dignissim convallis aenean et tortor. Vitae auctor eu augue ut lectus arcu. Ac turpis egestas integer eget aliquet nibh praesent. Interdum velit euismod in pellentesque massa placerat duis. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt. Nisl rhoncus mattis rhoncus urna neque viverra justo. Odio ut enim blandit volutpat. Ac auctor augue mauris augue neque gravida. Ut lectus arcu bibendum at varius vel. Porttitor leo a diam sollicitudin tempor id eu nisl nunc. Dolor sit amet consectetur adipiscing elit duis tristique. Semper quis lectus nulla at volutpat diam ut. Sapien eget mi proin sed.</p>",
  187. utils.UnixTimestampToMySqlDateTime(utils.GetCurrentUnixTimestamp()),
  188. 1,
  189. ); err != nil {
  190. return err
  191. }
  192. // Indexes
  193. if _, err := db.Exec(`ALTER TABLE shop_cat_product_rel ADD UNIQUE KEY product_category (product_id,category_id) USING BTREE;`); err != nil {
  194. return err
  195. }
  196. if _, err := db.Exec(`ALTER TABLE shop_cat_product_rel ADD KEY FK_shop_cat_product_rel_product_id (product_id);`); err != nil {
  197. return err
  198. }
  199. if _, err := db.Exec(`ALTER TABLE shop_cat_product_rel ADD KEY FK_shop_cat_product_rel_category_id (category_id);`); err != nil {
  200. return err
  201. }
  202. if _, err := db.Exec(`ALTER TABLE shop_cats ADD UNIQUE KEY alias (alias);`); err != nil {
  203. return err
  204. }
  205. if _, err := db.Exec(`ALTER TABLE shop_cats ADD KEY lft (lft), ADD KEY rgt (rgt);`); err != nil {
  206. return err
  207. }
  208. if _, err := db.Exec(`ALTER TABLE shop_cats ADD KEY FK_shop_cats_user (user);`); err != nil {
  209. return err
  210. }
  211. if _, err := db.Exec(`ALTER TABLE shop_filter_product_values ADD UNIQUE KEY product_filter_value (product_id,filter_value_id) USING BTREE;`); err != nil {
  212. return err
  213. }
  214. if _, err := db.Exec(`ALTER TABLE shop_filter_product_values ADD KEY FK_shop_filter_product_values_product_id (product_id);`); err != nil {
  215. return err
  216. }
  217. if _, err := db.Exec(`ALTER TABLE shop_filter_product_values ADD KEY FK_shop_filter_product_values_filter_value_id (filter_value_id);`); err != nil {
  218. return err
  219. }
  220. if _, err := db.Exec(`ALTER TABLE shop_filters ADD KEY name (name);`); err != nil {
  221. return err
  222. }
  223. if _, err := db.Exec(`ALTER TABLE shop_filters_values ADD KEY FK_shop_filters_values_filter_id (filter_id);`); err != nil {
  224. return err
  225. }
  226. if _, err := db.Exec(`ALTER TABLE shop_filters_values ADD KEY name (name);`); err != nil {
  227. return err
  228. }
  229. if _, err := db.Exec(`ALTER TABLE shop_products ADD UNIQUE KEY alias (alias);`); err != nil {
  230. return err
  231. }
  232. if _, err := db.Exec(`ALTER TABLE shop_products ADD KEY FK_shop_products_user (user);`); err != nil {
  233. return err
  234. }
  235. if _, err := db.Exec(`ALTER TABLE shop_products ADD KEY FK_shop_products_currency (currency);`); err != nil {
  236. return err
  237. }
  238. // References
  239. if _, err := db.Exec(`
  240. ALTER TABLE shop_cat_product_rel ADD CONSTRAINT FK_shop_cat_product_rel_product_id
  241. FOREIGN KEY (product_id) REFERENCES shop_products (id) ON DELETE RESTRICT;
  242. `); err != nil {
  243. return err
  244. }
  245. if _, err := db.Exec(`
  246. ALTER TABLE shop_cat_product_rel ADD CONSTRAINT FK_shop_cat_product_rel_category_id
  247. FOREIGN KEY (category_id) REFERENCES shop_cats (id) ON DELETE RESTRICT;
  248. `); err != nil {
  249. return err
  250. }
  251. if _, err := db.Exec(`
  252. ALTER TABLE shop_cats ADD CONSTRAINT FK_shop_cats_user
  253. FOREIGN KEY (user) REFERENCES users (id) ON DELETE RESTRICT;
  254. `); err != nil {
  255. return err
  256. }
  257. if _, err := db.Exec(`
  258. ALTER TABLE shop_filter_product_values ADD CONSTRAINT FK_shop_filter_product_values_product_id
  259. FOREIGN KEY (product_id) REFERENCES shop_products (id) ON DELETE RESTRICT;
  260. `); err != nil {
  261. return err
  262. }
  263. if _, err := db.Exec(`
  264. ALTER TABLE shop_filter_product_values ADD CONSTRAINT FK_shop_filter_product_values_filter_value_id
  265. FOREIGN KEY (filter_value_id) REFERENCES shop_filters_values (id) ON DELETE RESTRICT;
  266. `); err != nil {
  267. return err
  268. }
  269. if _, err := db.Exec(`
  270. ALTER TABLE shop_filters_values ADD CONSTRAINT FK_shop_filters_values_filter_id
  271. FOREIGN KEY (filter_id) REFERENCES shop_filters (id) ON DELETE RESTRICT;
  272. `); err != nil {
  273. return err
  274. }
  275. if _, err := db.Exec(`
  276. ALTER TABLE shop_products ADD CONSTRAINT FK_shop_products_user
  277. FOREIGN KEY (user) REFERENCES users (id) ON DELETE RESTRICT;
  278. `); err != nil {
  279. return err
  280. }
  281. if _, err := db.Exec(`
  282. ALTER TABLE shop_products ADD CONSTRAINT FK_shop_products_currency
  283. FOREIGN KEY (currency) REFERENCES shop_currencies (id) ON DELETE RESTRICT;
  284. `); err != nil {
  285. return err
  286. }
  287. return nil
  288. }