Skip to content
Closed
147 changes: 147 additions & 0 deletions src/main/java/lol/pbu/z4j/model/AbstractComment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
/*
* Copyright 2026 Peanut Butter Unicorn, LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package lol.pbu.z4j.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.micronaut.core.annotation.Nullable;
import io.micronaut.serde.annotation.Serdeable;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.time.ZonedDateTime;

/**
* Abstraction of a Comment
*
* @author Jonathan-Zollinger
* @since 0.1.2
* @see Comment
* @see PostComment
*/
@Accessors(chain = true)
@ToString
@Getter
@Setter
@Serdeable
public abstract class AbstractComment {

public static final String JSON_PROPERTY_BODY = "body";
public static final String JSON_PROPERTY_AUTHOR_ID = "author_id";
public static final String JSON_PROPERTY_CREATED_AT = "created_at";
public static final String JSON_PROPERTY_HTML_URL = "html_url";
public static final String JSON_PROPERTY_ID = "id";
public static final String JSON_PROPERTY_NON_AUTHOR_EDITOR_ID = "non_author_editor_id";
public static final String JSON_PROPERTY_NON_AUTHOR_UPDATED_AT = "non_author_updated_at";
public static final String JSON_PROPERTY_UPDATED_AT = "updated_at";
public static final String JSON_PROPERTY_URL = "url";
public static final String JSON_PROPERTY_VOTE_COUNT = "vote_count";
public static final String JSON_PROPERTY_VOTE_SUM = "vote_sum";

/**
* The comment made by the author. See <a href=\"#user-content\">User content</a>
*/
@NotNull
@JsonProperty(JSON_PROPERTY_BODY)
private String body;

/**
* The id of the author of this comment. Writable on create by Help Center managers. See <a href=\"#create-comment\">Create Comment</a>
*/
@Nullable
@JsonProperty(JSON_PROPERTY_AUTHOR_ID)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private Long authorId;

/**
* The time the comment was created. Writable on create by Help Center managers. See <a href=\"#create-comment\">Create Comment</a>
*/
@Nullable
@JsonProperty(JSON_PROPERTY_CREATED_AT)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private String createdAt;

/**
* The url of the comment
*/
@Nullable
@JsonProperty(JSON_PROPERTY_HTML_URL)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private String htmlUrl;

/**
* Automatically assigned when the comment is created
*/
@Nullable
@JsonProperty(JSON_PROPERTY_ID)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private Long id;

/**
* <h4>The user id of whoever performed the most recent (if any) non-author edit.</h4> A non-author edit consists of
* an edit make by a user other than the author that creates or updates the <code>body</code> or
* <code>author_id</code>. Note that only edits made after May 17, 2021, will be reflected in this field.
* If no non-author edits have occurred since May 17, 2021, then this field will be<code>null</code>.
*/
@Nullable
@JsonProperty(JSON_PROPERTY_NON_AUTHOR_EDITOR_ID)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private Long nonAuthorEditorId;

/**
* When the comment was last edited by a non-author user
*/
@Nullable
@JsonProperty(JSON_PROPERTY_NON_AUTHOR_UPDATED_AT)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private ZonedDateTime nonAuthorUpdatedAt;

/**
* The time at which the comment was last updated
*/
@Nullable
@JsonProperty(JSON_PROPERTY_UPDATED_AT)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private String updatedAt;

/**
* The API url of this comment
*/
@Nullable
@JsonProperty(JSON_PROPERTY_URL)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private String url;

/**
* The total number of upvotes and downvotes
*/
@Nullable
@JsonProperty(JSON_PROPERTY_VOTE_COUNT)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private Long voteCount;

/**
* The sum of upvotes (+1) and downvotes (-1), which may be positive or negative
*/
@Nullable
@JsonProperty(JSON_PROPERTY_VOTE_SUM)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private Long voteSum;

}
120 changes: 4 additions & 116 deletions src/main/java/lol/pbu/z4j/model/Attachment.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

Expand All @@ -38,6 +39,7 @@
@NoArgsConstructor
@AllArgsConstructor
@Data
@EqualsAndHashCode(callSuper = false)
@JsonPropertyOrder({
Attachment.JSON_PROPERTY_CONTENT_TYPE,
Attachment.JSON_PROPERTY_CONTENT_URL,
Expand All @@ -55,124 +57,10 @@
Attachment.JSON_PROPERTY_THUMBNAILS,
})
@Serdeable
public class Attachment {
public class Attachment extends AttachmentBase {

public static final String JSON_PROPERTY_CONTENT_TYPE = "content_type";
public static final String JSON_PROPERTY_CONTENT_URL = "content_url";
public static final String JSON_PROPERTY_DELETED = "deleted";
public static final String JSON_PROPERTY_FILE_NAME = "file_name";
public static final String JSON_PROPERTY_HEIGHT = "height";
public static final String JSON_PROPERTY_ID = "id";
public static final String JSON_PROPERTY_INLINE = "inline";
public static final String JSON_PROPERTY_MALWARE_ACCESS_OVERRIDE = "malware_access_override";
public static final String JSON_PROPERTY_MALWARE_SCAN_RESULT = "malware_scan_result";
public static final String JSON_PROPERTY_MAPPED_CONTENT_URL = "mapped_content_url";
public static final String JSON_PROPERTY_SIZE = "size";
public static final String JSON_PROPERTY_URL = "url";
public static final String JSON_PROPERTY_WIDTH = "width";
public static final String JSON_PROPERTY_THUMBNAILS = "thumbnails";

/**
* The content type of the image. Example value: \"image/png\"
*/
@Nullable
@JsonProperty(JSON_PROPERTY_CONTENT_TYPE)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private String contentType;

/**
* A full URL where the attachment image file can be downloaded. The file may be hosted externally so take care not to inadvertently send Zendesk authentication credentials. See <a href=\"/documentation/ticketing/managing-tickets/working-with-url-properties\">Working with url properties</a>
*/
@Nullable
@JsonProperty(JSON_PROPERTY_CONTENT_URL)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private String contentUrl;

/**
* If true, the attachment has been deleted
*/
@Nullable
@JsonProperty(JSON_PROPERTY_DELETED)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private Boolean deleted;

/**
* The name of the image file
*/
@Nullable
@JsonProperty(JSON_PROPERTY_FILE_NAME)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private String fileName;

/**
* The height of the image file in pixels. If height is unknown, returns null
*/
@Nullable
@JsonProperty(JSON_PROPERTY_HEIGHT)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private String height;

/**
* Automatically assigned when created
*/
@Nullable
@JsonProperty(JSON_PROPERTY_ID)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private Integer id;

/**
* If true, the attachment is excluded from the attachment list and the attachment's URL can be referenced within the comment of a ticket. Default is false
*/
@Nullable
@JsonProperty(JSON_PROPERTY_INLINE)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private Boolean inline;

/**
* If true, you can download an attachment flagged as malware. If false, you can't download such an attachment.
*/
@Nullable
@JsonProperty(JSON_PROPERTY_MALWARE_ACCESS_OVERRIDE)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private Boolean malwareAccessOverride;

@Nullable
@JsonProperty(JSON_PROPERTY_MALWARE_SCAN_RESULT)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private AttachmentBaseMalwareScanResult malwareScanResult;

/**
* The URL the attachment image file has been mapped to
*/
@Nullable
@JsonProperty(JSON_PROPERTY_MAPPED_CONTENT_URL)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private String mappedContentUrl;

/**
* The size of the image file in bytes
*/
@Nullable
@JsonProperty(JSON_PROPERTY_SIZE)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private Integer size;

/**
* A URL to access the attachment details
*/
@Nullable
@JsonProperty(JSON_PROPERTY_URL)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private String url;

/**
* The width of the image file in pixels. If width is unknown, returns null
*/
@Nullable
@JsonProperty(JSON_PROPERTY_WIDTH)
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private String width;

/**
* An array of attachment objects. Note that photo thumbnails do not have thumbnails
*/
Expand All @@ -181,4 +69,4 @@ public class Attachment {
@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
private List<@Valid AttachmentBase> thumbnails;

}
}
1 change: 1 addition & 0 deletions src/main/java/lol/pbu/z4j/model/AttachmentBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
*
* @author Jonathan-Zollinger
* @since 0.1.1
* @see Attachment
*/
@Accessors(chain = true)
@NoArgsConstructor
Expand Down
55 changes: 0 additions & 55 deletions src/main/java/lol/pbu/z4j/model/AttachmentThumbnails.java

This file was deleted.

1 change: 1 addition & 0 deletions src/main/java/lol/pbu/z4j/model/Category.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
*
* @author Jonathan-Zollinger
* @since 0.1.1
* @see Section
*/
@Accessors(chain = true)
@EqualsAndHashCode
Expand Down
Loading
Loading