Search in sources :

Example 1 with Organizations

use of com.walmartlabs.concord.server.jooq.tables.Organizations in project concord by walmartlabs.

the class OrganizationDao method list.

public List<OrganizationEntry> list(UUID currentUserId, boolean onlyCurrent, int offset, int limit, String filter) {
    Organizations o = ORGANIZATIONS.as("o");
    Users u = USERS.as("u");
    SelectOnConditionStep<Record10<UUID, String, UUID, String, String, String, String, String, JSONB, JSONB>> q = dsl().select(o.ORG_ID, o.ORG_NAME, o.OWNER_ID, u.USERNAME, u.DOMAIN, u.DISPLAY_NAME, u.USER_TYPE, o.VISIBILITY, o.META, o.ORG_CFG).from(o).leftJoin(u).on(u.USER_ID.eq(o.OWNER_ID));
    if (currentUserId != null) {
        // public orgs are visible for anyone
        // but show them only if onlyCurrent == false
        // i.e. when the user specifically asked to show all available orgs
        Condition isPublic = value(onlyCurrent).isFalse().and(o.VISIBILITY.eq(OrganizationVisibility.PUBLIC.toString()));
        // check if the user belongs to a team in an org
        SelectConditionStep<Record1<UUID>> teamIds = select(TEAMS.TEAM_ID).from(TEAMS).where(TEAMS.ORG_ID.eq(o.ORG_ID));
        Condition isInATeam = exists(selectOne().from(V_USER_TEAMS).where(V_USER_TEAMS.USER_ID.eq(currentUserId).and(V_USER_TEAMS.TEAM_ID.in(teamIds))));
        // check if the user owns orgs
        Condition ownsOrgs = o.OWNER_ID.eq(currentUserId);
        // if any of those conditions true then the org must be visible
        q.where(or(isPublic, isInATeam, ownsOrgs));
    }
    if (filter != null) {
        q.where(o.ORG_NAME.containsIgnoreCase(filter));
    }
    if (offset >= 0) {
        q.offset(offset);
    }
    if (limit > 0) {
        q.limit(limit);
    }
    return q.orderBy(o.ORG_NAME).fetch(this::toEntry);
}
Also used : Organizations(com.walmartlabs.concord.server.jooq.tables.Organizations) Users(com.walmartlabs.concord.server.jooq.tables.Users)

Example 2 with Organizations

use of com.walmartlabs.concord.server.jooq.tables.Organizations in project concord by walmartlabs.

the class OrganizationDao method getByName.

public OrganizationEntry getByName(DSLContext tx, String name) {
    Organizations o = ORGANIZATIONS.as("o");
    Users u = USERS.as("u");
    return tx.select(o.ORG_ID, o.ORG_NAME, o.OWNER_ID, u.USERNAME, u.DOMAIN, u.DISPLAY_NAME, u.USER_TYPE, o.VISIBILITY, o.META, o.ORG_CFG).from(o).leftJoin(u).on(u.USER_ID.eq(o.OWNER_ID)).where(o.ORG_NAME.eq(name)).fetchOne(this::toEntry);
}
Also used : Organizations(com.walmartlabs.concord.server.jooq.tables.Organizations) Users(com.walmartlabs.concord.server.jooq.tables.Users)

Example 3 with Organizations

use of com.walmartlabs.concord.server.jooq.tables.Organizations in project concord by walmartlabs.

the class TriggerScheduleDao method findNext.

public TriggerSchedulerEntry findNext() {
    return txResult(tx -> {
        // TODO fetch everything in a single request?
        Map<String, Object> e = tx.select(TRIGGER_SCHEDULE.TRIGGER_ID, TRIGGER_SCHEDULE.FIRE_AT).from(TRIGGER_SCHEDULE).where(TRIGGER_SCHEDULE.FIRE_AT.le(currentOffsetDateTime())).limit(1).forUpdate().skipLocked().fetchOneMap();
        if (e == null) {
            return null;
        }
        UUID id = (UUID) e.get(TRIGGER_SCHEDULE.TRIGGER_ID.getName());
        OffsetDateTime fireAt = (OffsetDateTime) e.get(TRIGGER_SCHEDULE.FIRE_AT.getName());
        Triggers t = TRIGGERS.as("t");
        Projects p = PROJECTS.as("p");
        Repositories r = REPOSITORIES.as("r");
        Organizations o = ORGANIZATIONS.as("o");
        Field<UUID> orgIdField = select(p.ORG_ID).from(p).where(p.PROJECT_ID.eq(t.PROJECT_ID)).asField();
        Record13<UUID, UUID, String, UUID, String, UUID, String, String[], JSONB, JSONB, JSONB, OffsetDateTime, String> record = tx.select(t.TRIGGER_ID, orgIdField, o.ORG_NAME, t.PROJECT_ID, p.PROJECT_NAME, t.REPO_ID, r.REPO_NAME, t.ACTIVE_PROFILES, t.ARGUMENTS, t.TRIGGER_CFG, t.CONDITIONS, currentOffsetDateTime(), t.EVENT_SOURCE).from(t, p, r, o).where(t.TRIGGER_ID.eq(id).and(t.PROJECT_ID.eq(p.PROJECT_ID)).and(p.PROJECT_ID.eq(r.PROJECT_ID)).and(p.ORG_ID.eq(o.ORG_ID)).and(t.REPO_ID.eq(r.REPO_ID))).fetchOne();
        if (record == null) {
            return null;
        }
        UUID triggerId = record.value1();
        UUID orgId = record.value2();
        String organizationName = record.value3();
        UUID projectId = record.value4();
        String projectName = record.value5();
        UUID repoId = record.value6();
        String repositoryName = record.value7();
        List<String> activeProfiles = toList(record.value8());
        Map<String, Object> arguments = objectMapper.fromJSONB(record.value9());
        Map<String, Object> cfg = objectMapper.fromJSONB(record.value10());
        Map<String, Object> conditions = objectMapper.fromJSONB(record.value11());
        OffsetDateTime now = record.value12();
        String eventSource = record.value13();
        TriggerSchedulerEntry result = new TriggerSchedulerEntry(fireAt, triggerId, orgId, organizationName, projectId, projectName, repoId, repositoryName, conditions, cfg, activeProfiles, arguments, eventSource);
        ZoneId zoneId = null;
        if (conditions.get(Constants.Trigger.CRON_TIMEZONE) != null) {
            zoneId = TimeZone.getTimeZone((String) conditions.get(Constants.Trigger.CRON_TIMEZONE)).toZoneId();
        }
        updateFireAt(tx, id, CronUtils.nextExecution(now, (String) conditions.get(Constants.Trigger.CRON_SPEC), zoneId));
        return result;
    });
}
Also used : Repositories(com.walmartlabs.concord.server.jooq.tables.Repositories) ZoneId(java.time.ZoneId) Projects(com.walmartlabs.concord.server.jooq.tables.Projects) Triggers(com.walmartlabs.concord.server.jooq.tables.Triggers) OffsetDateTime(java.time.OffsetDateTime) Organizations(com.walmartlabs.concord.server.jooq.tables.Organizations)

Example 4 with Organizations

use of com.walmartlabs.concord.server.jooq.tables.Organizations in project concord by walmartlabs.

the class TriggersDao method selectTriggers.

private SelectJoinStep<Record12<UUID, UUID, String, UUID, String, UUID, String, String, String[], JSONB, JSONB, JSONB>> selectTriggers(DSLContext tx) {
    Organizations o = ORGANIZATIONS.as("o");
    Projects p = PROJECTS.as("p");
    Repositories r = REPOSITORIES.as("r");
    return tx.select(TRIGGERS.TRIGGER_ID, o.ORG_ID, o.ORG_NAME, TRIGGERS.PROJECT_ID, p.PROJECT_NAME, TRIGGERS.REPO_ID, r.REPO_NAME, TRIGGERS.EVENT_SOURCE, TRIGGERS.ACTIVE_PROFILES, TRIGGERS.ARGUMENTS, TRIGGERS.CONDITIONS, TRIGGERS.TRIGGER_CFG).from(TRIGGERS).leftJoin(p).on(p.PROJECT_ID.eq(TRIGGERS.PROJECT_ID)).leftJoin(o).on(o.ORG_ID.eq(p.ORG_ID)).leftJoin(r).on(r.REPO_ID.eq(TRIGGERS.REPO_ID));
}
Also used : Repositories(com.walmartlabs.concord.server.jooq.tables.Repositories) Organizations(com.walmartlabs.concord.server.jooq.tables.Organizations) Projects(com.walmartlabs.concord.server.jooq.tables.Projects)

Example 5 with Organizations

use of com.walmartlabs.concord.server.jooq.tables.Organizations in project concord by walmartlabs.

the class JsonStoreDao method list.

public List<JsonStoreEntry> list(UUID orgId, UUID currentUserId, int offset, int limit, String filter) {
    Organizations o = ORGANIZATIONS.as("o");
    JsonStores j = JSON_STORES.as("j");
    Users u = USERS.as("u");
    SelectJoinStep<Record10<UUID, String, UUID, String, String, UUID, String, String, String, String>> q = buildSelect(dsl(), o, j, u);
    if (currentUserId != null) {
        // public stores are visible for anyone
        Condition isPublic = j.VISIBILITY.eq(JsonStoreVisibility.PUBLIC.toString());
        // check if the user belongs to a team in the org
        SelectConditionStep<Record1<UUID>> teamIds = select(TEAMS.TEAM_ID).from(TEAMS).where(TEAMS.ORG_ID.eq(orgId));
        Condition isInATeam = exists(selectOne().from(Tables.V_USER_TEAMS).where(Tables.V_USER_TEAMS.USER_ID.eq(currentUserId).and(Tables.V_USER_TEAMS.TEAM_ID.in(teamIds))));
        // check if the user owns stores in the org
        Condition ownsStores = j.OWNER_ID.eq(currentUserId);
        // check if the user owns the org
        Condition ownsOrg = o.OWNER_ID.eq(currentUserId);
        // if any of those conditions true then the store must be visible
        q.where(or(isPublic, isInATeam, ownsStores, ownsOrg));
    }
    if (filter != null) {
        q.where(j.JSON_STORE_NAME.containsIgnoreCase(filter));
    }
    if (offset >= 0) {
        q.offset(offset);
    }
    if (limit > 0) {
        q.limit(limit);
    }
    return q.where(j.ORG_ID.eq(orgId)).orderBy(j.JSON_STORE_NAME).fetch(JsonStoreDao::toEntity);
}
Also used : Organizations(com.walmartlabs.concord.server.jooq.tables.Organizations) JsonStores(com.walmartlabs.concord.server.jooq.tables.JsonStores) Users(com.walmartlabs.concord.server.jooq.tables.Users)

Aggregations

Organizations (com.walmartlabs.concord.server.jooq.tables.Organizations)8 Users (com.walmartlabs.concord.server.jooq.tables.Users)6 Projects (com.walmartlabs.concord.server.jooq.tables.Projects)4 Repositories (com.walmartlabs.concord.server.jooq.tables.Repositories)2 JsonStores (com.walmartlabs.concord.server.jooq.tables.JsonStores)1 Secrets (com.walmartlabs.concord.server.jooq.tables.Secrets)1 Triggers (com.walmartlabs.concord.server.jooq.tables.Triggers)1 OffsetDateTime (java.time.OffsetDateTime)1 ZoneId (java.time.ZoneId)1