Last active
June 26, 2019 16:05
-
-
Save ConnectedReasoning/262e081e6a8736914507cb5fe02e0a82 to your computer and use it in GitHub Desktop.
react-native async storage simple db
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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