SiteDb.hx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package tools.haxelib;
  2. class User extends neko.db.Object {
  3. public static var manager = new neko.db.Manager<User>(User);
  4. public var id : Int;
  5. public var name : String;
  6. public var fullname : String;
  7. public var email : String;
  8. public var pass : String;
  9. }
  10. class Project extends neko.db.Object {
  11. static function RELATIONS() {
  12. return [
  13. { key : "owner", prop : "owner", manager : User.manager },
  14. { key : "version", prop : "version", manager : Version.manager },
  15. ];
  16. }
  17. public static var manager = new ProjectManager(Project);
  18. public var id : Int;
  19. public var name : String;
  20. public var description : String;
  21. public var website : String;
  22. public var license : String;
  23. public var owner(dynamic,dynamic) : User;
  24. public var version(dynamic,dynamic) : Version;
  25. }
  26. class Version extends neko.db.Object {
  27. static function RELATIONS() {
  28. return [{ key : "project", prop : "project", manager : Project.manager }];
  29. }
  30. public static var manager = new VersionManager(Version);
  31. public var id : Int;
  32. public var project(dynamic,dynamic) : Project;
  33. public var name : String;
  34. public var date : String; // sqlite does not have a proper 'date' type
  35. public var comments : String;
  36. public var downloads : Int;
  37. }
  38. class Developer extends neko.db.Object {
  39. static var TABLE_IDS = ["user","project"];
  40. static function RELATIONS() {
  41. return [
  42. { key : "user", prop : "user", manager : User.manager },
  43. { key : "project", prop : "project", manager : Project.manager },
  44. ];
  45. }
  46. public static var manager = new neko.db.Manager<Developer>(Developer);
  47. public var user(dynamic,dynamic) : User;
  48. public var project(dynamic,dynamic) : Project;
  49. }
  50. class ProjectManager extends neko.db.Manager<Project> {
  51. public function containing( word ) {
  52. word = quote("%"+word+"%");
  53. return results("SELECT name FROM Project WHERE name LIKE "+word+" OR description LIKE "+word);
  54. }
  55. public function allByName() {
  56. return objects("SELECT * FROM Project ORDER BY name COLLATE NOCASE",false);
  57. }
  58. }
  59. class VersionManager extends neko.db.Manager<Version> {
  60. public function latest( n : Int ) {
  61. return objects("SELECT * FROM Version ORDER BY date DESC LIMIT "+n,false);
  62. }
  63. public function byProject( p : Project ) {
  64. return objects("SELECT * FROM Version WHERE project = "+p.id+" ORDER BY date DESC",false);
  65. }
  66. }
  67. class SiteDb {
  68. public static function create( db : neko.db.Connection ) {
  69. db.request("DROP TABLE IF EXISTS User");
  70. db.request("
  71. CREATE TABLE User (
  72. id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  73. name VARCHAR(16) NOT NULL UNIQUE,
  74. fullname VARCHAR(50) NOT NULL,
  75. pass VARCHAR(32) NOT NULL,
  76. email VARCHAR(50) NOT NULL
  77. )
  78. ");
  79. db.request("DROP TABLE IF EXISTS Project");
  80. db.request("
  81. CREATE TABLE Project (
  82. id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  83. owner INTEGER NOT NULL,
  84. name VARCHAR(32) NOT NULL UNIQUE,
  85. license VARCHAR(20) NOT NULL,
  86. description TEXT NOT NULL,
  87. website VARCHAR(100) NOT NULL,
  88. version INT
  89. )
  90. ");
  91. db.request("DROP TABLE IF EXISTS Version");
  92. db.request("
  93. CREATE TABLE Version (
  94. id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  95. project INTEGER NOT NULL,
  96. downloads INTEGER NOT NULL,
  97. date VARCHAR(19) NOT NULL,
  98. name VARCHAR(32) NOT NULL,
  99. comments TEXT NOT NULL
  100. )
  101. ");
  102. db.request("DROP TABLE IF EXISTS Developer");
  103. db.request("
  104. CREATE TABLE Developer (
  105. user INTEGER NOT NULL,
  106. project INTEGER NOT NULL
  107. )
  108. ");
  109. }
  110. }