@jackie-chan/jobtrack 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +133 -0
  3. package/dist/commands/company.command.d.ts +3 -0
  4. package/dist/commands/company.command.d.ts.map +1 -0
  5. package/dist/commands/company.command.js +29 -0
  6. package/dist/commands/company.command.js.map +1 -0
  7. package/dist/commands/db.command.d.ts +3 -0
  8. package/dist/commands/db.command.d.ts.map +1 -0
  9. package/dist/commands/db.command.js +17 -0
  10. package/dist/commands/db.command.js.map +1 -0
  11. package/dist/commands/job.command.d.ts +8 -0
  12. package/dist/commands/job.command.d.ts.map +1 -0
  13. package/dist/commands/job.command.js +91 -0
  14. package/dist/commands/job.command.js.map +1 -0
  15. package/dist/commands/location.command.d.ts +3 -0
  16. package/dist/commands/location.command.d.ts.map +1 -0
  17. package/dist/commands/location.command.js +21 -0
  18. package/dist/commands/location.command.js.map +1 -0
  19. package/dist/commands/profile.command.d.ts +3 -0
  20. package/dist/commands/profile.command.d.ts.map +1 -0
  21. package/dist/commands/profile.command.js +29 -0
  22. package/dist/commands/profile.command.js.map +1 -0
  23. package/dist/commands/serve.command.d.ts +3 -0
  24. package/dist/commands/serve.command.d.ts.map +1 -0
  25. package/dist/commands/serve.command.js +9 -0
  26. package/dist/commands/serve.command.js.map +1 -0
  27. package/dist/controllers/cli/companyController.d.ts +11 -0
  28. package/dist/controllers/cli/companyController.d.ts.map +1 -0
  29. package/dist/controllers/cli/companyController.js +57 -0
  30. package/dist/controllers/cli/companyController.js.map +1 -0
  31. package/dist/controllers/cli/db.controller.d.ts +4 -0
  32. package/dist/controllers/cli/db.controller.d.ts.map +1 -0
  33. package/dist/controllers/cli/db.controller.js +71 -0
  34. package/dist/controllers/cli/db.controller.js.map +1 -0
  35. package/dist/controllers/cli/job.controller.d.ts +8 -0
  36. package/dist/controllers/cli/job.controller.d.ts.map +1 -0
  37. package/dist/controllers/cli/job.controller.js +68 -0
  38. package/dist/controllers/cli/job.controller.js.map +1 -0
  39. package/dist/controllers/cli/locationController.d.ts +5 -0
  40. package/dist/controllers/cli/locationController.d.ts.map +1 -0
  41. package/dist/controllers/cli/locationController.js +57 -0
  42. package/dist/controllers/cli/locationController.js.map +1 -0
  43. package/dist/controllers/cli/profile.controller.d.ts +6 -0
  44. package/dist/controllers/cli/profile.controller.d.ts.map +1 -0
  45. package/dist/controllers/cli/profile.controller.js +42 -0
  46. package/dist/controllers/cli/profile.controller.js.map +1 -0
  47. package/dist/controllers/httpController.d.ts +8 -0
  48. package/dist/controllers/httpController.d.ts.map +1 -0
  49. package/dist/controllers/httpController.js +76 -0
  50. package/dist/controllers/httpController.js.map +1 -0
  51. package/dist/database/database.d.ts +4 -0
  52. package/dist/database/database.d.ts.map +1 -0
  53. package/dist/database/database.js +203 -0
  54. package/dist/database/database.js.map +1 -0
  55. package/dist/database/types/companies.type.d.ts +10 -0
  56. package/dist/database/types/companies.type.d.ts.map +1 -0
  57. package/dist/database/types/companies.type.js +2 -0
  58. package/dist/database/types/companies.type.js.map +1 -0
  59. package/dist/database/types/contacts.type.d.ts +13 -0
  60. package/dist/database/types/contacts.type.d.ts.map +1 -0
  61. package/dist/database/types/contacts.type.js +2 -0
  62. package/dist/database/types/contacts.type.js.map +1 -0
  63. package/dist/database/types/interviews.type.d.ts +11 -0
  64. package/dist/database/types/interviews.type.d.ts.map +1 -0
  65. package/dist/database/types/interviews.type.js +2 -0
  66. package/dist/database/types/interviews.type.js.map +1 -0
  67. package/dist/database/types/jobactivity.type.d.ts +7 -0
  68. package/dist/database/types/jobactivity.type.d.ts.map +1 -0
  69. package/dist/database/types/jobactivity.type.js +2 -0
  70. package/dist/database/types/jobactivity.type.js.map +1 -0
  71. package/dist/database/types/jobcontacts.type.d.ts +5 -0
  72. package/dist/database/types/jobcontacts.type.d.ts.map +1 -0
  73. package/dist/database/types/jobcontacts.type.js +2 -0
  74. package/dist/database/types/jobcontacts.type.js.map +1 -0
  75. package/dist/database/types/jobdocs.type.d.ts +9 -0
  76. package/dist/database/types/jobdocs.type.d.ts.map +1 -0
  77. package/dist/database/types/jobdocs.type.js +2 -0
  78. package/dist/database/types/jobdocs.type.js.map +1 -0
  79. package/dist/database/types/joblocation.type.d.ts +5 -0
  80. package/dist/database/types/joblocation.type.d.ts.map +1 -0
  81. package/dist/database/types/joblocation.type.js +2 -0
  82. package/dist/database/types/joblocation.type.js.map +1 -0
  83. package/dist/database/types/jobpriority.type.d.ts +6 -0
  84. package/dist/database/types/jobpriority.type.d.ts.map +1 -0
  85. package/dist/database/types/jobpriority.type.js +2 -0
  86. package/dist/database/types/jobpriority.type.js.map +1 -0
  87. package/dist/database/types/jobs.type.d.ts +37 -0
  88. package/dist/database/types/jobs.type.d.ts.map +1 -0
  89. package/dist/database/types/jobs.type.js +2 -0
  90. package/dist/database/types/jobs.type.js.map +1 -0
  91. package/dist/database/types/jobsource.type.d.ts +5 -0
  92. package/dist/database/types/jobsource.type.d.ts.map +1 -0
  93. package/dist/database/types/jobsource.type.js +2 -0
  94. package/dist/database/types/jobsource.type.js.map +1 -0
  95. package/dist/database/types/jobstatuses.type.d.ts +6 -0
  96. package/dist/database/types/jobstatuses.type.d.ts.map +1 -0
  97. package/dist/database/types/jobstatuses.type.js +2 -0
  98. package/dist/database/types/jobstatuses.type.js.map +1 -0
  99. package/dist/database/types/jobstatushistory.type.d.ts +8 -0
  100. package/dist/database/types/jobstatushistory.type.d.ts.map +1 -0
  101. package/dist/database/types/jobstatushistory.type.js +2 -0
  102. package/dist/database/types/jobstatushistory.type.js.map +1 -0
  103. package/dist/database/types/jobtags.type.d.ts +6 -0
  104. package/dist/database/types/jobtags.type.d.ts.map +1 -0
  105. package/dist/database/types/jobtags.type.js +2 -0
  106. package/dist/database/types/jobtags.type.js.map +1 -0
  107. package/dist/database/types/jobtasks.type.d.ts +10 -0
  108. package/dist/database/types/jobtasks.type.d.ts.map +1 -0
  109. package/dist/database/types/jobtasks.type.js +2 -0
  110. package/dist/database/types/jobtasks.type.js.map +1 -0
  111. package/dist/database/types/profile.type.d.ts +7 -0
  112. package/dist/database/types/profile.type.d.ts.map +1 -0
  113. package/dist/database/types/profile.type.js +2 -0
  114. package/dist/database/types/profile.type.js.map +1 -0
  115. package/dist/database/types/settings.type.d.ts +7 -0
  116. package/dist/database/types/settings.type.d.ts.map +1 -0
  117. package/dist/database/types/settings.type.js +2 -0
  118. package/dist/database/types/settings.type.js.map +1 -0
  119. package/dist/database/types/tags.type.d.ts +7 -0
  120. package/dist/database/types/tags.type.d.ts.map +1 -0
  121. package/dist/database/types/tags.type.js +2 -0
  122. package/dist/database/types/tags.type.js.map +1 -0
  123. package/dist/database/types.d.ts +79 -0
  124. package/dist/database/types.d.ts.map +1 -0
  125. package/dist/database/types.js +18 -0
  126. package/dist/database/types.js.map +1 -0
  127. package/dist/index.d.ts +3 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +23 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/repository/companyRepository.d.ts +8 -0
  132. package/dist/repository/companyRepository.d.ts.map +1 -0
  133. package/dist/repository/companyRepository.js +53 -0
  134. package/dist/repository/companyRepository.js.map +1 -0
  135. package/dist/repository/core.repository.d.ts +16 -0
  136. package/dist/repository/core.repository.d.ts.map +1 -0
  137. package/dist/repository/core.repository.js +57 -0
  138. package/dist/repository/core.repository.js.map +1 -0
  139. package/dist/repository/jobsRepository.d.ts +14 -0
  140. package/dist/repository/jobsRepository.d.ts.map +1 -0
  141. package/dist/repository/jobsRepository.js +186 -0
  142. package/dist/repository/jobsRepository.js.map +1 -0
  143. package/dist/repository/locationRepository.d.ts +11 -0
  144. package/dist/repository/locationRepository.d.ts.map +1 -0
  145. package/dist/repository/locationRepository.js +33 -0
  146. package/dist/repository/locationRepository.js.map +1 -0
  147. package/dist/repository/profileRepository.d.ts +7 -0
  148. package/dist/repository/profileRepository.d.ts.map +1 -0
  149. package/dist/repository/profileRepository.js +25 -0
  150. package/dist/repository/profileRepository.js.map +1 -0
  151. package/dist/server.d.ts +2 -0
  152. package/dist/server.d.ts.map +1 -0
  153. package/dist/server.js +16 -0
  154. package/dist/server.js.map +1 -0
  155. package/dist/service/companyService.d.ts +6 -0
  156. package/dist/service/companyService.d.ts.map +1 -0
  157. package/dist/service/companyService.js +32 -0
  158. package/dist/service/companyService.js.map +1 -0
  159. package/dist/service/jobService.d.ts +18 -0
  160. package/dist/service/jobService.d.ts.map +1 -0
  161. package/dist/service/jobService.js +48 -0
  162. package/dist/service/jobService.js.map +1 -0
  163. package/dist/service/locationService.d.ts +6 -0
  164. package/dist/service/locationService.d.ts.map +1 -0
  165. package/dist/service/locationService.js +31 -0
  166. package/dist/service/locationService.js.map +1 -0
  167. package/dist/service/profileService.d.ts +10 -0
  168. package/dist/service/profileService.d.ts.map +1 -0
  169. package/dist/service/profileService.js +42 -0
  170. package/dist/service/profileService.js.map +1 -0
  171. package/dist/session/session.d.ts +12 -0
  172. package/dist/session/session.d.ts.map +1 -0
  173. package/dist/session/session.js +22 -0
  174. package/dist/session/session.js.map +1 -0
  175. package/dist/transformers/output.d.ts +10 -0
  176. package/dist/transformers/output.d.ts.map +1 -0
  177. package/dist/transformers/output.js +67 -0
  178. package/dist/transformers/output.js.map +1 -0
  179. package/package.json +44 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) [year] [fullname]
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,133 @@
1
+ # jobtrack
2
+
3
+ A blazing-fast, local command-line interface (CLI) for tracking your job applications.
4
+
5
+ Built with **Node.js** and **SQLite**, `jobtrack` keeps your career data entirely on your own machine.
6
+
7
+ ## Installation
8
+
9
+ Install `jobtrack` globally using npm:
10
+
11
+ ```bash
12
+ npm install -g jobtrack
13
+ ```
14
+
15
+ ## Getting Started
16
+
17
+ Initialize your local database and create your first active profile:
18
+
19
+ ```bash
20
+ jobtrack profile create <username>
21
+ ```
22
+
23
+ For example:
24
+
25
+ ```bash
26
+ jobtrack profile create developer
27
+ ```
28
+
29
+ ## Core Commands
30
+
31
+ ### Profiles
32
+
33
+ Create, list, and switch between profiles.
34
+
35
+ ```bash
36
+ jobtrack profile create <username>
37
+ jobtrack profile list
38
+ jobtrack profile switch <username>
39
+ ```
40
+
41
+ ### Jobs
42
+
43
+ Add and list your job applications.
44
+
45
+ ```bash
46
+ jobtrack add -c "Company" -r "Role"
47
+ jobtrack list
48
+ ```
49
+
50
+ Example:
51
+
52
+ ```bash
53
+ jobtrack add -c "Google" -r "Software Engineer"
54
+ ```
55
+
56
+ ### Companies
57
+
58
+ Manage companies in your job tracker.
59
+
60
+ ```bash
61
+ jobtrack company add <name>
62
+ jobtrack company list
63
+ ```
64
+
65
+ Example:
66
+
67
+ ```bash
68
+ jobtrack company add "Google"
69
+ ```
70
+
71
+ ### Locations
72
+
73
+ Manage job locations.
74
+
75
+ ```bash
76
+ jobtrack location add <name>
77
+ jobtrack location list
78
+ ```
79
+
80
+ Example:
81
+
82
+ ```bash
83
+ jobtrack location add "Bangalore"
84
+ ```
85
+
86
+ ### Database
87
+
88
+ View and query your local job tracking database.
89
+
90
+ View jobs:
91
+
92
+ ```bash
93
+ jobtrack db view jobs
94
+ ```
95
+
96
+ Run a custom SQL query:
97
+
98
+ ```bash
99
+ jobtrack db query "<sql>"
100
+ ```
101
+
102
+ Example:
103
+
104
+ ```bash
105
+ jobtrack db query "SELECT * FROM jobs;"
106
+ ```
107
+
108
+ ## Local Data & Architecture
109
+
110
+ `jobtrack` is designed as a **local-first CLI application**. Your career data stays on your machine and does not require a remote database.
111
+
112
+ The application stores its data under:
113
+
114
+ ```text
115
+ ~/.jobtrack/
116
+ ├── jobtrack.db
117
+ └── session.json
118
+ ```
119
+
120
+ * **`jobtrack.db`** — Local SQLite database containing your job tracking data.
121
+ * **`session.json`** — Stores the active profile/session information.
122
+
123
+ ## Why jobtrack?
124
+
125
+ * ⚡ **Fast** — Lightweight CLI built with Node.js.
126
+ * 🔒 **Private** — Your career data stays locally on your machine.
127
+ * 💾 **SQLite-powered** — No external database server required.
128
+ * 👤 **Multi-profile support** — Manage multiple job-search profiles.
129
+ * 🖥️ **CLI-first** — Track applications directly from your terminal.
130
+
131
+ ## License
132
+
133
+ MIT
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const companyCommand: Command;
3
+ //# sourceMappingURL=company.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"company.command.d.ts","sourceRoot":"","sources":["../../src/commands/company.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,cAAc,SAC6B,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { Command } from "commander";
2
+ import { handleCompanyList, handleCompanyUpdate, handleCompanyDelete, handleCompanyAdd } from "../controllers/cli/companyController.js";
3
+ export const companyCommand = new Command("company")
4
+ .description("Manage companies you have applied to");
5
+ companyCommand
6
+ .command("add <name>")
7
+ .description("Add a new company manually")
8
+ .option("--industry <industry>", "Set the company's industry")
9
+ .option("--website <url>", "Set the company's website URL")
10
+ .action((name, options) => {
11
+ handleCompanyAdd(name, options);
12
+ });
13
+ companyCommand
14
+ .command("list")
15
+ .description("List all companies for the active profile")
16
+ .action(() => handleCompanyList());
17
+ companyCommand
18
+ .command("update <id>")
19
+ .description("Update company details like industry or website")
20
+ .option("--industry <industry>", "Set the company's industry")
21
+ .option("--website <url>", "Set the company's website URL")
22
+ .action((id, options) => {
23
+ handleCompanyUpdate(id, options);
24
+ });
25
+ companyCommand
26
+ .command("delete <id>")
27
+ .description("Delete a company (Warning: this deletes all jobs tied to it)")
28
+ .action((id) => handleCompanyDelete(id));
29
+ //# sourceMappingURL=company.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"company.command.js","sourceRoot":"","sources":["../../src/commands/company.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAExI,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KAC/C,WAAW,CAAC,sCAAsC,CAAC,CAAC;AAEzD,cAAc;KACT,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,uBAAuB,EAAE,4BAA4B,CAAC;KAC7D,MAAM,CAAC,iBAAiB,EAAE,+BAA+B,CAAC;KAC1D,MAAM,CAAC,CAAC,IAAY,EAAE,OAAgD,EAAE,EAAE;IACvE,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEP,cAAc;KACT,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAEvC,cAAc;KACT,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,uBAAuB,EAAE,4BAA4B,CAAC;KAC7D,MAAM,CAAC,iBAAiB,EAAE,+BAA+B,CAAC;KAC1D,MAAM,CAAC,CAAC,EAAU,EAAE,OAAgD,EAAE,EAAE;IACrE,mBAAmB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEP,cAAc;KACT,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,8DAA8D,CAAC;KAC3E,MAAM,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const dbCommand: Command;
3
+ //# sourceMappingURL=db.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.command.d.ts","sourceRoot":"","sources":["../../src/commands/db.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,SAAS,SACkC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { Command } from "commander";
2
+ import { handleDbPath, handleDbView, handleDbDelete } from "../controllers/cli/db.controller.js";
3
+ export const dbCommand = new Command("db")
4
+ .description("Inspect the underlying SQLite database");
5
+ dbCommand
6
+ .command("path")
7
+ .description("Print the absolute path to the SQLite database file")
8
+ .action(() => handleDbPath());
9
+ dbCommand
10
+ .command("view <table_name>")
11
+ .description("Print all rows from a specific database table")
12
+ .action((tableName) => handleDbView(tableName));
13
+ dbCommand
14
+ .command("delete <table_name> <id>")
15
+ .description("Delete a specific record from a table by its ID")
16
+ .action((tableName, id) => handleDbDelete(tableName, id));
17
+ //# sourceMappingURL=db.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.command.js","sourceRoot":"","sources":["../../src/commands/db.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAEjG,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;KACvC,WAAW,CAAC,wCAAwC,CAAC,CAAC;AAEzD,SAAS;KACN,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;AAEhC,SAAS;KACN,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,CAAC,SAAiB,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;AAE1D,SAAS;KACN,OAAO,CAAC,0BAA0B,CAAC;KACnC,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,CAAC,SAAiB,EAAE,EAAU,EAAE,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Command } from "commander";
2
+ export declare const addCommand: Command;
3
+ export declare const listCommand: Command;
4
+ export declare const viewCommand: Command;
5
+ export declare const updateCommand: Command;
6
+ export declare const statusCommand: Command;
7
+ export declare const deleteCommand: Command;
8
+ //# sourceMappingURL=job.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.command.d.ts","sourceRoot":"","sources":["../../src/commands/job.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,UAAU,SAiCnB,CAAC;AAEL,eAAO,MAAM,WAAW,SAEK,CAAC;AAE9B,eAAO,MAAM,WAAW,SAGiB,CAAC;AAE1C,eAAO,MAAM,aAAa,SAkCtB,CAAC;AAEL,eAAO,MAAM,aAAa,SAOtB,CAAC;AAEL,eAAO,MAAM,aAAa,SAGiB,CAAC"}
@@ -0,0 +1,91 @@
1
+ import { Command } from "commander";
2
+ import { handleAdd, handleList, handleView, handleUpdate, handleStatus, handleDelete, } from "../controllers/cli/job.controller.js";
3
+ export const addCommand = new Command("add")
4
+ .description("Add a new job application")
5
+ .requiredOption("-c, --company <company>", "Company name")
6
+ .requiredOption("-r, --role <role>", "Job title / role")
7
+ .option("-s, --status <status>", "Application status", "applied")
8
+ .option("-d, --date <date>", "Date applied (YYYY-MM-DD)", new Date().toISOString().split("T")[0])
9
+ .option("-l, --link <link>", "Job posting URL")
10
+ .option("-n, --notes <notes>", "Notes")
11
+ .option("--source <source>", "Where you found this (e.g. LinkedIn, Referral)")
12
+ .option("--location <location>", "City/region (e.g. New York)")
13
+ .option("--mode <mode>", "Remote, Onsite, or Hybrid")
14
+ .option("--priority <priority>", "low, medium, or high")
15
+ .option("--salary-min <min>", "Minimum salary")
16
+ .option("--salary-max <max>", "Maximum salary")
17
+ .option("--salary-currency <currency>", "Salary currency", "USD")
18
+ .option("--salary-period <period>", "per year, per month, or per hour")
19
+ .action((opts) => {
20
+ handleAdd({
21
+ company_name: opts.company,
22
+ role: opts.role,
23
+ status: opts.status,
24
+ date_applied: opts.date,
25
+ link: opts.link,
26
+ notes: opts.notes,
27
+ source_name: opts.source,
28
+ location_name: opts.location,
29
+ mode_name: opts.mode,
30
+ priority_name: opts.priority,
31
+ salary_min: opts.salaryMin ? Number(opts.salaryMin) : null,
32
+ salary_max: opts.salaryMax ? Number(opts.salaryMax) : null,
33
+ salary_currency: opts.salaryCurrency,
34
+ salary_period_name: opts.salaryPeriod,
35
+ });
36
+ });
37
+ export const listCommand = new Command("list")
38
+ .description("List all job applications")
39
+ .action(() => handleList());
40
+ export const viewCommand = new Command("view")
41
+ .description("View full details of a single job application")
42
+ .argument("<id>", "Job application ID")
43
+ .action((id) => handleView(id));
44
+ export const updateCommand = new Command("update")
45
+ .description("Update fields on an existing job application")
46
+ .argument("<id>", "Job application ID")
47
+ .option("-c, --company <company>", "Company name")
48
+ .option("-r, --role <role>", "Job title / role")
49
+ .option("-s, --status <status>", "Application status")
50
+ .option("-d, --date <date>", "Date applied (YYYY-MM-DD)")
51
+ .option("-l, --link <link>", "Job posting URL")
52
+ .option("-n, --notes <notes>", "Notes")
53
+ .option("--source <source>", "Where you found this (e.g. LinkedIn, Referral)")
54
+ .option("--location <location>", "City/region (e.g. New York)")
55
+ .option("--mode <mode>", "Remote, Onsite, or Hybrid")
56
+ .option("--priority <priority>", "low, medium, or high")
57
+ .option("--salary-min <min>", "Minimum salary")
58
+ .option("--salary-max <max>", "Maximum salary")
59
+ .option("--salary-currency <currency>", "Salary currency")
60
+ .option("--salary-period <period>", "per year, per month, or per hour")
61
+ .action((id, opts) => {
62
+ handleUpdate(id, {
63
+ company_name: opts.company,
64
+ role: opts.role,
65
+ status: opts.status,
66
+ date_applied: opts.date,
67
+ link: opts.link,
68
+ notes: opts.notes,
69
+ source_name: opts.source,
70
+ location_name: opts.location,
71
+ mode_name: opts.mode,
72
+ priority_name: opts.priority,
73
+ salary_currency: opts.salaryCurrency,
74
+ salary_period_name: opts.salaryPeriod,
75
+ ...(opts.salaryMin !== undefined ? { salary_min: Number(opts.salaryMin) } : {}),
76
+ ...(opts.salaryMax !== undefined ? { salary_max: Number(opts.salaryMax) } : {}),
77
+ });
78
+ });
79
+ export const statusCommand = new Command("status")
80
+ .description("Change the status of a job application (keeps a history entry)")
81
+ .argument("<id>", "Job application ID")
82
+ .argument("<status>", "New status (applied, screening, interview, offer, rejected, ghosted, withdrawn)")
83
+ .option("-n, --note <note>", "Note to attach to this status change")
84
+ .action((id, status, opts) => {
85
+ handleStatus(id, status, opts.note);
86
+ });
87
+ export const deleteCommand = new Command("delete")
88
+ .description("Delete a job application")
89
+ .argument("<id>", "Job application ID")
90
+ .action((id) => handleDelete(id));
91
+ //# sourceMappingURL=job.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.command.js","sourceRoot":"","sources":["../../src/commands/job.command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const locationCommand: Command;
3
+ //# sourceMappingURL=location.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location.command.d.ts","sourceRoot":"","sources":["../../src/commands/location.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,eAAe,SACkD,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { Command } from "commander";
2
+ import { handleLocationList, handleLocationAdd, handleLocationUpdate, handleLocationDelete, } from "../controllers/cli/locationController.js";
3
+ export const locationCommand = new Command("location")
4
+ .description("Manage job application locations (e.g., Madurai, Coimbatore)");
5
+ locationCommand
6
+ .command("list")
7
+ .description("List all available locations")
8
+ .action(() => handleLocationList());
9
+ locationCommand
10
+ .command("add <name>")
11
+ .description("Add a new geographical location")
12
+ .action((name) => handleLocationAdd(name));
13
+ locationCommand
14
+ .command("update <id> <name>")
15
+ .description("Update an existing location name")
16
+ .action((id, name) => handleLocationUpdate(id, name));
17
+ locationCommand
18
+ .command("delete <id>")
19
+ .description("Delete a location by its ID")
20
+ .action((id) => handleLocationDelete(id));
21
+ //# sourceMappingURL=location.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location.command.js","sourceRoot":"","sources":["../../src/commands/location.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,0CAA0C,CAAC;AAElD,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,8DAA8D,CAAC,CAAC;AAE/E,eAAe;KACZ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAEtC,eAAe;KACZ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;AAErD,eAAe;KACZ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,CAAC,EAAU,EAAE,IAAY,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AAExE,eAAe;KACZ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const profileCommand: Command;
3
+ //# sourceMappingURL=profile.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.command.d.ts","sourceRoot":"","sources":["../../src/commands/profile.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,cAAc,SACa,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { Command } from "commander";
2
+ import { handleProfileCreate, handleProfileSwitch, handleProfileList, handleProfileWhoami, handleProfileUpdate, } from "../controllers/cli/profile.controller.js";
3
+ export const profileCommand = new Command("profile")
4
+ .description("Manage user profiles");
5
+ profileCommand
6
+ .command("create <username>")
7
+ .description("Create a new profile and make it active")
8
+ .option("-n, --name <display_name>", "Set an optional display name for the profile")
9
+ .action((username, options) => { handleProfileCreate(username, options.name); });
10
+ profileCommand
11
+ .command("switch <username>")
12
+ .description("Switch the active profile")
13
+ .action((username) => handleProfileSwitch(username));
14
+ profileCommand
15
+ .command("list")
16
+ .description("List all profiles on this machine")
17
+ .action(() => handleProfileList());
18
+ profileCommand
19
+ .command("whoami")
20
+ .description("Show the currently active profile")
21
+ .action(() => handleProfileWhoami());
22
+ profileCommand
23
+ .command("update")
24
+ .description("Update the active profile's details")
25
+ .requiredOption("-n, --name <display_name>", "The new display name")
26
+ .action((options) => {
27
+ handleProfileUpdate(options.name);
28
+ });
29
+ //# sourceMappingURL=profile.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.command.js","sourceRoot":"","sources":["../../src/commands/profile.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACH,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,0CAA0C,CAAC;AAElD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KAC/C,WAAW,CAAC,sBAAsB,CAAC,CAAC;AAEzC,cAAc;KACT,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,2BAA2B,EAAE,8CAA8C,CAAC;KACnF,MAAM,CAAC,CAAC,QAAgB,EAAE,OAA0B,EAAE,EAAE,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC;AAE/G,cAAc;KACT,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,CAAC,QAAgB,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEjE,cAAc;KACT,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAEvC,cAAc;KACT,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAEzC,cAAc;KACT,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,qCAAqC,CAAC;KAClD,cAAc,CAAC,2BAA2B,EAAE,sBAAsB,CAAC;KACnE,MAAM,CAAC,CAAC,OAAyB,EAAE,EAAE;IAClC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const serveCommand: Command;
3
+ //# sourceMappingURL=serve.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.command.d.ts","sourceRoot":"","sources":["../../src/commands/serve.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,YAAY,SAKrB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Command } from "commander";
2
+ import { startServer } from "../server.js";
3
+ export const serveCommand = new Command("serve")
4
+ .description("Start jobtrack as a local HTTP server")
5
+ .option("-p, --port <port>", "Port to listen on", "3000")
6
+ .action((opts) => {
7
+ startServer(Number(opts.port));
8
+ });
9
+ //# sourceMappingURL=serve.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.command.js","sourceRoot":"","sources":["../../src/commands/serve.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,CAAC;KACxD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACf,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare function handleCompanyAdd(name: string, options: {
2
+ industry?: string;
3
+ website?: string;
4
+ }): void;
5
+ export declare function handleCompanyList(): void;
6
+ export declare function handleCompanyUpdate(idStr: string, options: {
7
+ industry?: string;
8
+ website?: string;
9
+ }): void;
10
+ export declare function handleCompanyDelete(idStr: string): void;
11
+ //# sourceMappingURL=companyController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companyController.d.ts","sourceRoot":"","sources":["../../../src/controllers/cli/companyController.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,QAO9F;AAED,wBAAgB,iBAAiB,SAqBhC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,QAUlG;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,QAUhD"}
@@ -0,0 +1,57 @@
1
+ import { listCompaniesService, updateCompanyService, deleteCompanyService, addCompanyService } from "../../service/companyService.js";
2
+ import { printSuccess, printError, printEmptyState } from "../../transformers/output.js";
3
+ import Table from "cli-table3";
4
+ export function handleCompanyAdd(name, options) {
5
+ try {
6
+ const company = addCompanyService(name, options.industry, options.website);
7
+ printSuccess(`Added company #${company.id}: ${company.name}`);
8
+ }
9
+ catch (err) {
10
+ printError(err.message);
11
+ }
12
+ }
13
+ export function handleCompanyList() {
14
+ try {
15
+ const companies = listCompaniesService();
16
+ if (companies.length === 0) {
17
+ printEmptyState("No companies found. They are added automatically when you add a job.");
18
+ return;
19
+ }
20
+ const table = new Table({
21
+ head: ["ID", "Name", "Industry", "Website"],
22
+ style: { head: ["cyan"] },
23
+ });
24
+ for (const c of companies) {
25
+ table.push([c.id, c.name, c.industry || "-", c.website || "-"]);
26
+ }
27
+ console.log(table.toString());
28
+ }
29
+ catch (err) {
30
+ printError(err.message);
31
+ }
32
+ }
33
+ export function handleCompanyUpdate(idStr, options) {
34
+ try {
35
+ const id = Number(idStr);
36
+ if (isNaN(id))
37
+ throw new Error("Company ID must be a valid number.");
38
+ const company = updateCompanyService(id, options.industry, options.website);
39
+ printSuccess(`Updated company #${company.id}: ${company.name}`);
40
+ }
41
+ catch (err) {
42
+ printError(err.message);
43
+ }
44
+ }
45
+ export function handleCompanyDelete(idStr) {
46
+ try {
47
+ const id = Number(idStr);
48
+ if (isNaN(id))
49
+ throw new Error("Company ID must be a valid number.");
50
+ deleteCompanyService(id);
51
+ printSuccess(`Deleted company #${id}. Note: All associated job applications were also removed due to cascade deletion.`);
52
+ }
53
+ catch (err) {
54
+ printError(err.message);
55
+ }
56
+ }
57
+ //# sourceMappingURL=companyController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companyController.js","sourceRoot":"","sources":["../../../src/controllers/cli/companyController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACtI,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAAgD;IAC7F,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3E,YAAY,CAAC,kBAAkB,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,UAAU,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;QACzC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,eAAe,CAAC,sEAAsE,CAAC,CAAC;YACxF,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;YACtB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC;YAC3C,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;SAC1B,CAAC,CAAC;QAEH,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,UAAU,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,OAAgD;IACjG,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,KAAK,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAErE,MAAM,OAAO,GAAG,oBAAoB,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5E,YAAY,CAAC,oBAAoB,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,UAAU,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,KAAK,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAErE,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACzB,YAAY,CAAC,oBAAoB,EAAE,oFAAoF,CAAC,CAAC;IAC3H,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,UAAU,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function handleDbPath(): void;
2
+ export declare function handleDbView(tableName: string): void;
3
+ export declare function handleDbDelete(tableName: string, id: string): void;
4
+ //# sourceMappingURL=db.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.controller.d.ts","sourceRoot":"","sources":["../../../src/controllers/cli/db.controller.ts"],"names":[],"mappings":"AAQA,wBAAgB,YAAY,SAE3B;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,QA0C7C;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAiC3D"}
@@ -0,0 +1,71 @@
1
+ // This file is the initial version of the interactive database section
2
+ // Used for directly executing raw queries
3
+ import { raw, rawRun } from "../../repository/core.repository.js";
4
+ import { getDbPath } from "../../database/database.js";
5
+ import Table from "cli-table3";
6
+ import chalk from "chalk";
7
+ export function handleDbPath() {
8
+ console.log(chalk.green("Database path: ") + getDbPath());
9
+ }
10
+ export function handleDbView(tableName) {
11
+ try {
12
+ // 1. Verify the table exists to prevent basic SQL errors
13
+ const check = raw("SELECT name FROM sqlite_master WHERE type='table' AND name=@name", { name: tableName });
14
+ if (check.length === 0) {
15
+ console.log(chalk.red(`Table "${tableName}" does not exist.`));
16
+ return;
17
+ }
18
+ // 2. Fetch all raw rows
19
+ const rows = raw(`SELECT * FROM ${tableName}`);
20
+ if (rows.length === 0) {
21
+ console.log(chalk.gray(`Table "${tableName}" is empty.`));
22
+ return;
23
+ }
24
+ // 3. Dynamically generate a CLI table based on the row keys
25
+ const firstRow = rows[0];
26
+ if (!firstRow) {
27
+ console.log(chalk.gray(`Table "${tableName}" is empty.`));
28
+ return;
29
+ }
30
+ const headers = Object.keys(firstRow);
31
+ const table = new Table({
32
+ head: headers,
33
+ style: { head: ["cyan"] },
34
+ });
35
+ for (const row of rows) {
36
+ table.push(Object.values(row).map(val => (val === null ? "NULL" : String(val))));
37
+ }
38
+ console.log(table.toString());
39
+ }
40
+ catch (err) {
41
+ console.log(chalk.red("Error reading table: " + err.message));
42
+ }
43
+ }
44
+ export function handleDbDelete(tableName, id) {
45
+ try {
46
+ const numericId = Number(id);
47
+ if (isNaN(numericId)) {
48
+ console.log(chalk.red(" Error: ID must be a valid number."));
49
+ return;
50
+ }
51
+ // 1. Verify table exists to prevent SQL injection on table names
52
+ const check = raw("SELECT name FROM sqlite_master WHERE type='table' AND name=@name", { name: tableName });
53
+ if (check.length === 0) {
54
+ console.log(chalk.red(` Error: Table "${tableName}" does not exist.`));
55
+ return;
56
+ }
57
+ // 2. Check if the record actually exists before deleting (better UX)
58
+ const record = raw(`SELECT id FROM ${tableName} WHERE id = @id`, { id: numericId });
59
+ if (record.length === 0) {
60
+ console.log(chalk.gray(`No record found with ID ${numericId} in table "${tableName}".`));
61
+ return;
62
+ }
63
+ // 3. Execute the delete operation safely
64
+ rawRun(`DELETE FROM ${tableName} WHERE id = @id`, { id: numericId });
65
+ console.log(chalk.green(` Successfully deleted record #${numericId} from ${tableName}.`));
66
+ }
67
+ catch (err) {
68
+ console.log(chalk.red("Error deleting record: " + err.message));
69
+ }
70
+ }
71
+ //# sourceMappingURL=db.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.controller.js","sourceRoot":"","sources":["../../../src/controllers/cli/db.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { NewJob, UpdateJob, Status } from "../../database/types.js";
2
+ export declare function handleAdd(data: NewJob): void;
3
+ export declare function handleList(): void;
4
+ export declare function handleView(idStr: string): void;
5
+ export declare function handleUpdate(idStr: string, data: UpdateJob): void;
6
+ export declare function handleStatus(idStr: string, status: Status, note?: string): void;
7
+ export declare function handleDelete(idStr: string): void;
8
+ //# sourceMappingURL=job.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.controller.d.ts","sourceRoot":"","sources":["../../../src/controllers/cli/job.controller.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAQzE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,QAOrC;AAED,wBAAgB,UAAU,SAWzB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,QAOvC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,QAO1D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,QAOxE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,QAQzC"}