001// -------------------------------------------------------------------------------- 002// Copyright 2002-2026 Echo Three, LLC 003// 004// Licensed under the Apache License, Version 2.0 (the "License"); 005// you may not use this file except in compliance with the License. 006// You may obtain a copy of the License at 007// 008// http://www.apache.org/licenses/LICENSE-2.0 009// 010// Unless required by applicable law or agreed to in writing, software 011// distributed under the License is distributed on an "AS IS" BASIS, 012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013// See the License for the specific language governing permissions and 014// limitations under the License. 015// -------------------------------------------------------------------------------- 016 017package com.echothree.model.control.subscription.server.graphql; 018 019import com.echothree.model.control.graphql.server.graphql.BaseEntityInstanceObject; 020import com.echothree.model.control.graphql.server.graphql.TimeObject; 021import com.echothree.model.control.party.server.graphql.PartyObject; 022import com.echothree.model.control.party.server.graphql.PartySecurityUtils; 023import com.echothree.model.data.subscription.server.entity.Subscription; 024import com.echothree.model.data.subscription.server.entity.SubscriptionDetail; 025import graphql.annotations.annotationTypes.GraphQLDescription; 026import graphql.annotations.annotationTypes.GraphQLField; 027import graphql.annotations.annotationTypes.GraphQLName; 028import graphql.annotations.annotationTypes.GraphQLNonNull; 029import graphql.schema.DataFetchingEnvironment; 030 031@GraphQLDescription("subscription object") 032@GraphQLName("Subscription") 033public class SubscriptionObject 034 extends BaseEntityInstanceObject { 035 036 private final Subscription subscription; // Always Present 037 038 public SubscriptionObject(Subscription subscription) { 039 super(subscription.getPrimaryKey()); 040 041 this.subscription = subscription; 042 } 043 044 private SubscriptionDetail subscriptionDetail; // Optional, use getSubscriptionDetail() 045 046 private SubscriptionDetail getSubscriptionDetail() { 047 if(subscriptionDetail == null) { 048 subscriptionDetail = subscription.getLastDetail(); 049 } 050 051 return subscriptionDetail; 052 } 053 054 @GraphQLField 055 @GraphQLDescription("subscription type") 056 public SubscriptionTypeObject getSubscriptionType(final DataFetchingEnvironment env) { 057 return SubscriptionSecurityUtils.getHasSubscriptionTypeAccess(env) ? new SubscriptionTypeObject(getSubscriptionDetail().getSubscriptionType()) : null; 058 } 059 060 @GraphQLField 061 @GraphQLDescription("subscription name") 062 @GraphQLNonNull 063 public String getSubscriptionName() { 064 return getSubscriptionDetail().getSubscriptionName(); 065 } 066 067 @GraphQLField 068 @GraphQLDescription("party") 069 public PartyObject getParty(final DataFetchingEnvironment env) { 070 var party = getSubscriptionDetail().getParty(); 071 072 return PartySecurityUtils.getHasPartyAccess(env, party) ? new PartyObject(party) : null; 073 } 074 075 @GraphQLField 076 @GraphQLDescription("start time") 077 @GraphQLNonNull 078 public TimeObject getStartTime(final DataFetchingEnvironment env) { 079 return new TimeObject(getSubscriptionDetail().getStartTime()); 080 } 081 082 @GraphQLField 083 @GraphQLDescription("end time") 084 public TimeObject getEndTime(final DataFetchingEnvironment env) { 085 var endTime = getSubscriptionDetail().getEndTime(); 086 087 return endTime == null ? null : new TimeObject(endTime); 088 } 089 090}