protected Tenant insertTenant()

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;
    }