silentbalanceyh/vertx-zero

View on GitHub
vertx-gaia/vertx-up/src/main/java/io/vertx/up/unity/Where.java

Summary

Maintainability
A
0 mins
Test Coverage
package io.vertx.up.unity;

import io.horizon.eon.VString;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.core.shareddata.ClusterSerializable;
import io.vertx.up.eon.KName;
import io.vertx.up.util.Ut;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Objects;
import java.util.Set;

class Where {
    /*
     * 1 - instant is "YYYY-MM-DD HH:mm:ss"
     * 2 - Because here should convert to "YYYY-MM-DD" instead of equal here
     * 3 - generate between `>` and `<` into filters
     */
    static JsonObject whereDay(final JsonObject filters, final String field,
                               final Instant instant) {
        /*
         * field / instant
         */
        if (Ut.isNotNil(field) && Objects.nonNull(instant)) {
            final LocalDateTime current = Ut.toDateTime(instant);
            /* Get today date */
            final LocalDateTime begin = LocalDateTime.of(current.toLocalDate(), LocalTime.MIN);
            final LocalDateTime end = LocalDateTime.of(current.toLocalDate(), LocalTime.MAX);
            final JsonObject condition = new JsonObject();
            condition.put(field + ",<", Ut.parse(end).toInstant());
            condition.put(field + ",>", Ut.parse(begin).toInstant());
            condition.put(VString.EMPTY, Boolean.TRUE);
            filters.put("$" + field, condition);
        }
        return filters;
    }

    static JsonObject whereAnd() {
        return new JsonObject().put(VString.EMPTY, Boolean.TRUE);
    }

    static JsonObject whereOr() {
        return new JsonObject().put(VString.EMPTY, Boolean.FALSE);
    }

    static JsonObject whereKeys(final JsonArray keys) {
        final JsonObject criteria = whereAnd();
        criteria.put(KName.KEY + ",i", keys);
        return criteria;
    }

    static JsonObject whereAmb(final ClusterSerializable json,
                               final String fieldFrom,
                               final String fieldTo,
                               final boolean sigma) {
        final JsonObject criteria = whereAnd();
        if (json instanceof final JsonObject data) {
            final String from = Ut.valueString(data, fieldFrom);
            criteria.put(fieldTo, from);
            if (sigma) {
                criteria.put(KName.SIGMA, Ut.valueString(data, KName.SIGMA));
            }
        } else if (json instanceof final JsonArray data) {
            final Set<String> froms = Ut.valueSetString(data, fieldFrom);
            criteria.put(fieldTo + ",i", Ut.toJArray(froms));
            if (sigma) {
                criteria.put(KName.SIGMA, Ut.valueString(data, KName.SIGMA));
            }
        }
        return criteria;
    }
}