@happy-coders/fun-cli
Version:
Be your project management more fun!
88 lines (87 loc) • 3.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FileManager = void 0;
var tslib_1 = require("tslib");
var fs = tslib_1.__importStar(require("fs"));
var lodash_1 = require("lodash");
var project_entity_1 = require("../../project.entity");
var task_factory_1 = require("../../tasks/task.factory");
var abstract_manager_1 = require("./abstract.manager");
var PROJECTS_FILE_NAME = 'projects.json';
var FileManager = /** @class */ (function (_super) {
tslib_1.__extends(FileManager, _super);
function FileManager(path) {
var _this = _super.call(this) || this;
_this.path = path;
_this.filePath = path + "/" + PROJECTS_FILE_NAME;
return _this;
}
FileManager.prototype.create = function (project) {
var content = this._getProjectsFileContent();
content.projects.push(project);
this._write(content);
return true;
};
FileManager.prototype._getProjectsFileContent = function () {
this._ensureProjectsFolderExists();
if (!this._projectsFileExists()) {
this._createFreshProjectsFile();
}
var buffer = fs.readFileSync(this.filePath);
var content = JSON.parse(buffer.toString());
var projects = content.projects.map(function (project) {
var instance = new project_entity_1.Project(project.alias, project.path);
project.tasks.forEach(function (task) {
instance.addTask(task_factory_1.createTask(task.name));
});
return instance;
});
return { projects: projects };
};
FileManager.prototype._ensureProjectsFolderExists = function () {
if (!this._projectsFolderExists()) {
this._createProjectsFolder();
}
};
FileManager.prototype._createFreshProjectsFile = function () {
this._write(this._freshProjectContent());
};
FileManager.prototype._freshProjectContent = function () {
return { projects: [] };
};
FileManager.prototype._write = function (content) {
fs.writeFileSync(this.filePath, JSON.stringify(content));
};
FileManager.prototype._projectsFolderExists = function () {
return fs.existsSync(this.path);
};
FileManager.prototype._projectsFileExists = function () {
return fs.existsSync(this.filePath);
};
FileManager.prototype._createProjectsFolder = function () {
fs.mkdirSync(this.path, { recursive: true });
};
FileManager.prototype.listAll = function () {
var content = this._getProjectsFileContent();
return lodash_1.sortBy(content.projects, function (project) { return project.getAlias(); });
};
FileManager.prototype.findOne = function (alias) {
var content = this._getProjectsFileContent();
return this._findProjectByAlias(content.projects, alias);
};
FileManager.prototype._findProjectByAlias = function (projects, alias) {
return projects.find(function (project) { return project.hasSameAlias(alias); });
};
FileManager.prototype.update = function (alias, project) {
console.log(alias, project);
throw new Error('Method not implemented.');
};
FileManager.prototype.delete = function (alias) {
var content = this._getProjectsFileContent();
var updatedProjects = content.projects.filter(function (project) { return !project.hasSameAlias(alias); });
this._write({ projects: updatedProjects });
return updatedProjects.length < content.projects.length;
};
return FileManager;
}(abstract_manager_1.AbstractManager));
exports.FileManager = FileManager;