diff --git a/controllers/companyUser.go b/controllers/companyUser.go index 5b93b8f..e46608f 100644 --- a/controllers/companyUser.go +++ b/controllers/companyUser.go @@ -26,6 +26,7 @@ func (c *CompanyUserController) URLMapping() { c.Mapping("GetAll", c.GetAll) c.Mapping("Put", c.Put) c.Mapping("Delete", c.Delete) + c.Mapping("Delete", c.DeleteCompany) } // Post ... @@ -240,7 +241,6 @@ func (c *CompanyUserController) Delete() { c.ServeJSONError("Error deleting Company User") return } - fmt.Println(userCompanyMapping) err = models.DeleteUserCompanyMap(systemO, userCompanyMapping.ID) if err != nil { @@ -250,3 +250,49 @@ func (c *CompanyUserController) Delete() { c.ServeJSONSuccess("Successfully deleted!") } } + +// DeleteCompany ... +// @Title Delete Company +// @Description Delete the entire Company +// @Success 200 {string} delete success! +// @Failure 403 failed +// @router /deletecompany [delete] +func (c *CompanyUserController) DeleteCompany() { + + if currentUser.Role != constants.RoleOwner { + c.ServeJSONError("Must be Owner to delete a company") + return + } + + systemDB := companydb.GetSystemDatabase() + systemO, err := orm.NewOrmWithDB("postgres", "default", systemDB) + + // first check how many users are left + ucm, err := models.GetUserCompanyMapsByCompanyName(systemO, jwtSession.CompanyName) + if err != nil { + c.ServeJSONError("Error deleting User Company Relation") + return + } + + for _, uc := range ucm { + systemO.Begin() + err = models.DeleteUserCompanyMap(systemO, uc.ID) + if err != nil { + c.ServeJSONError("Error deleting User Company Relation") + systemO.Rollback() + return + } + } + + // Second check and delete the database + err = companydb.DeleteDatabase(jwtSession.CompanyName) + if err != nil { + systemO.Rollback() + c.ServeJSONError("Error deleting Company Database") + return + } else { + systemO.Commit() + c.ServeJSONSuccess("Successfully deleted!") + } + +} diff --git a/models/userCompanyMap.go b/models/userCompanyMap.go index 075f283..9c6e8ea 100644 --- a/models/userCompanyMap.go +++ b/models/userCompanyMap.go @@ -140,6 +140,18 @@ func GetAllUserCompanyMap(o orm.Ormer, query map[string]string, fields []string, return nil, err } +// GetUserCompanyMapsByCompanyName retrieves all UserCompanyMap matches a certain company. Returns empty list if +// no records exist +func GetUserCompanyMapsByCompanyName(o orm.Ormer, companyName string) (l []UserCompanyMap, err error) { + qs := o.QueryTable(new(UserCompanyMap)).Filter("company", companyName) + + _, err = qs.All(&l) + if err == nil { + return l, nil + } + return nil, err +} + // UpdateUserCompanyMapById updates UserCompanyMap by Id and returns error if the record to be updated doesn't exist func UpdateUserCompanyMapById(o orm.Ormer, m *UserCompanyMap) (err error) { v := UserCompanyMap{ID: m.ID} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index db5f1d0..9233abd 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -103,6 +103,14 @@ func init() { MethodParams: param.Make(), Params: nil}) + beego.GlobalControllerRouter["multitenantStack/controllers:CompanyUserController"] = append(beego.GlobalControllerRouter["multitenantStack/controllers:CompanyUserController"], + beego.ControllerComments{ + Method: "DeleteCompany", + Router: `/deletecompany`, + AllowHTTPMethods: []string{"delete"}, + MethodParams: param.Make(), + Params: nil}) + beego.GlobalControllerRouter["multitenantStack/controllers:ContactController"] = append(beego.GlobalControllerRouter["multitenantStack/controllers:ContactController"], beego.ControllerComments{ Method: "Post",