Skip to content

Instantly share code, notes, and snippets.

@ConnectedReasoning
Last active June 26, 2019 16:05
Show Gist options
  • Save ConnectedReasoning/262e081e6a8736914507cb5fe02e0a82 to your computer and use it in GitHub Desktop.
Save ConnectedReasoning/262e081e6a8736914507cb5fe02e0a82 to your computer and use it in GitHub Desktop.
react-native async storage simple db
import AsyncStorage from '@react-native-community/async-storage';
export default class CompanyDal{
constructor(){
this.readCompany = this.readCompany.bind(this);
this.reset = this.reset.bind(this);
this.initialize = this.initialize.bind(this);
this.createEmployee = this.createEmployee.bind(this);
this.updateEmployee = this.updateEmployee.bind(this);
this.deleteEmployee = this.deleteEmployee.bind(this);
this.createDepartment = this.createDepartment.bind(this);
this.readSingleDepartmentByName = this.readSingleDepartmentByName.bind(this);
this.readSingleDepartmentById = this.readSingleDepartmentById.bind(this);
this.updateDepartment = this.updateDepartment.bind(this);
this.deleteDepartment = this.deleteDepartment.bind(this);
}
async readCompany(){
try {
const company = await AsyncStorage.getItem('companyStorage');
return JSON.parse(company);
} catch(e) {
console.log('in companyDal.getCompany error ', e);
}
}
async reset(){
const newCompanyDoc = JSON.stringify({employees:[], departments:[]});
console.log('resetting Company');
await AsyncStorage.setItem('companyStorage', newCompanyDoc);
}
async initialize(){
try{
let checkCompany = await AsyncStorage.getItem('companyStorage');
checkCompany = JSON.parse(checkCompany);
if(!(checkCompany && checkCompany.employees && checkCompany.department))
console.log('initializing Company');
const newCompanyDoc = JSON.stringify({employees:[], departments:[]});
await AsyncStorage.setItem('companyStorage', newCompanyDoc);
} catch(error) {
console.log('initialize error ', error);
}
}
async createEmployee(employee){
try{
let company = await AsyncStorage.getItem('companyStorage');
company = JSON.parse(company);
company.employees.push(employee);
await AsyncStorage.setItem('companyStorage', JSON.stringify(company));
this.getCompany();
} catch(error){
console.log('createEmployee error ', error);
}
}
async updateEmployee(updatedEmployee){
try{
let company = await AsyncStorage.getItem('companyStorage');
company = JSON.parse(company);
const index = company.employees.findIndex(e => e.employee_id===updatedEmployee.employee_id);
if(index > -1){
company.employees[index] = updatedEmployee;
} else {
console.log('at companyDal.updateEmployee did not update');
}
await AsyncStorage.setItem('companyStorage', JSON.stringify(company));
this.getCompany();
} catch(error){
console.log('updateEmployee error', error);
}
}
async deleteEmployee(employee_id){
console.log('in companyDal.deleteEmployee ', employee_id);
try{
let company = await AsyncStorage.getItem('companyStorage');
company = JSON.parse(company);
company.employees = company.employees.filter(e =>{return e.employee_id !== employee_id});
await AsyncStorage.setItem('companyStorage', JSON.stringify(company));
this.getCompany();
} catch(error){
console.log('deleteEmployee error ', error);
}
}
async createDepartment(department){
try{
const previousDepartment = await this.readSingleDepartmentByName(department.name);
if(!previousDepartment || previousDepartment.length === 0){
let company = await AsyncStorage.getItem('companyStorage');
company = JSON.parse(company);
company.departments.push(department);
await AsyncStorage.setItem('companyStorage', JSON.stringify(company));
this.getCompany();
} else {
return null;
}
} catch(error){
console.log('createDepartment error ', error);
}
}
async readSingleDepartmentByName(name){
try{
let company = await AsyncStorage.getItem('companyStorage');
company = JSON.parse(company);
const foundDepartment = company.departments.filter(d =>{return d.name === name});
return foundDepartment;
} catch(error){
console.log('getSingleDepartmentByName error', error);
}
}
async readSingleDepartmentById(department_id){
try{
let company = await AsyncStorage.getItem('companyStorage');
company = JSON.parse(company);
const foundDepartment = company.departments.filter(d =>{return d.department_id === department_id});
return foundDepartment;
} catch(error){
console.log('getSingleDepartmentByName error', error);
}
}
async updateDepartment(updatedDepartment){
try{
let company = await AsyncStorage.getItem('companyStorage');
company = JSON.parse(company);
const index = company.departments.findIndex(d => d.department_id===updatedDepartment.department_id);
if(index > -1){
company.departments[index] = updatedDepartment;
} else {
console.log('at companyDal.updateDepartment did not update');
}
await AsyncStorage.setItem('companyStorage', JSON.stringify(company));
this.getCompany();
} catch(error){
console.log('updateDepartment error', error);
}
}
async deleteDepartment(department_id){
try{
let company = await AsyncStorage.getItem('companyStorage');
company = JSON.parse(company);
const toBeDeletedDepartment = await this.readSingleDepartmentById(department_id);
company.departments = company.departments.filter(d =>{return d.department_id !== department_id});
const replacedEmployees = company.employees.map(d=>{
if(d.department === toBeDeletedDepartment[0].name){
d.department = 'defaultDepartment';
}
return d;
});
company.employees = replacedEmployees;
await AsyncStorage.setItem('companyStorage', JSON.stringify(company));
this.getCompany();
} catch(error){
console.log('deleteDepartment error ', error);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment