in app/src/main/java/com/amazon/aws/partners/saasfactory/pgrls/service/AdminServiceImpl.java [78:124]
protected Tenant insertTenant(Tenant tenant) {
// Have to use named parameters in order to capture
// the database-generated id
NamedParameterJdbcTemplate jdbc = new NamedParameterJdbcTemplate(admin());
GeneratedKeyHolder generated = new GeneratedKeyHolder();
// Building our own SQL because of the enums... yuck
StringBuilder sql = new StringBuilder("INSERT INTO tenant (name");
StringBuilder values = new StringBuilder(" VALUES (:name");
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("name", tenant.getName());
if (tenant.getStatus() != null) {
sql.append(", status");
values.append(", :status");
params.addValue("status", tenant.getStatusAsString(), Types.VARCHAR);
}
if (tenant.getTier() != null) {
sql.append(", tier");
values.append(", :tier");
params.addValue("tier", tenant.getTierAsString(), Types.VARCHAR);
}
sql.append(")");
values.append(")");
sql.append(values);
try {
int update = jdbc.update(sql.toString(), params, generated);
if (update == 1) {
UUID tenantId = (UUID) generated.getKeys().get("tenant_id");
tenant.setId(tenantId);
} else {
// todo throw error here?
}
} catch (DataAccessException e) {
if (e.getRootCause() instanceof SQLException) {
SQLException sqlError = (SQLException) e.getRootCause();
if ("23505".equals(sqlError.getSQLState())) {
throw new UniqueRecordException(tenant.getName() + " already exists", e);
} else {
throw e;
}
} else {
throw e;
}
}
return tenant;
}