From 8dc0fdee2757677f3684b8e67703d446e9969612 Mon Sep 17 00:00:00 2001 From: Logic Date: Wed, 30 Oct 2024 10:08:20 +0800 Subject: [PATCH 1/4] [doc](download): update for v1.6.1 release (#2794) --- home/docs/download.md | 6 +++--- .../docusaurus-plugin-content-docs/current/download.md | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/home/docs/download.md b/home/docs/download.md index d02dc392573..737bb6dbf08 100644 --- a/home/docs/download.md +++ b/home/docs/download.md @@ -20,9 +20,9 @@ sidebar_label: Download Previous releases of HertzBeat may be affected by security issues, please use the latest one. ::: -| Version | Date | Download | Release Notes | -|---------|------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------| -| v1.6.0 | 2024.06.10 | [apache-hertzbeat-1.6.0-incubating-bin.tar.gz](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-1.6.0-incubating-bin.tar.gz) (HertzBeat) ( [signature](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-1.6.0-incubating-bin.tar.gz.asc) , [sha512](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-1.6.0-incubating-bin.tar.gz.sha512) )
[apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz) (HertzBeat Collector) ( [signature](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz.asc) , [sha512](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz.sha512) )
[apache-hertzbeat-1.6.0-incubating-src.tar.gz](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-1.6.0-incubating-src.tar.gz) (HertzBeat Source) ( [signature](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-1.6.0-incubating-src.tar.gz.asc) , [sha512](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-1.6.0-incubating-src.tar.gz.sha512) ) | [release note](https://github.com/apache/hertzbeat/releases/tag/v1.6.0) | +| Version | Date | Download | Release Notes | +|---------|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------| +| v1.6.1 | 2024.10.29 | [apache-hertzbeat-1.6.1-incubating-bin.tar.gz](https://dist.apache.org/repos/dist/release/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-bin.tar.gz) (HertzBeat) ( [signature](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-bin.tar.gz.asc) , [sha512](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-bin.tar.gz.sha512) )
[apache-hertzbeat-collector-1.6.1-incubating-bin.tar.gz](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-collector-1.6.1-incubating-bin.tar.gz) (HertzBeat Collector) ( [signature](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-collector-1.6.1-incubating-bin.tar.gz.asc) , [sha512](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-collector-1.6.1-incubating-bin.tar.gz.sha512) )
[apache-hertzbeat-1.6.1-incubating-src.tar.gz](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-src.tar.gz) (HertzBeat Source) ( [signature](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-src.tar.gz.asc) , [sha512](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-src.tar.gz.sha512) )
[apache-hertzbeat-1.6.1-incubating-docker-compose.tar.gz](https://dist.apache.org/repos/dist/release/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-docker-compose.tar.gz) (docker-compose) ( [signature](https://dist.apache.org/repos/dist/release/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-docker-compose.tar.gz.asc) , [sha512](https://dist.apache.org/repos/dist/release/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-docker-compose.tar.gz.sha512) ) | [release note](https://github.com/apache/hertzbeat/releases/tag/v1.6.1)| ## Release Docker Image diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/download.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/download.md index 83ffa9fbc00..1fc7ed6e87a 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/download.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/download.md @@ -20,9 +20,9 @@ sidebar_label: Download 以前版本的 HertzBeat 可能会受到安全问题的影响,请考虑使用最新版本。 ::: -| 版本 | 日期 | 下载 | Release Notes | +| 版本 | 日期 | 下载 | Release Notes | |--------|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------| -| v1.6.0 | 2024.06.10 | [apache-hertzbeat-1.6.0-incubating-bin.tar.gz](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-1.6.0-incubating-bin.tar.gz) (HertzBeat 主程序) ( [signature](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-1.6.0-incubating-bin.tar.gz.asc) , [sha512](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-1.6.0-incubating-bin.tar.gz.sha512) )
[apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz) (HertzBeat 采集器) ( [signature](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz.asc) , [sha512](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-collector-1.6.0-incubating-bin.tar.gz.sha512) )
[apache-hertzbeat-1.6.0-incubating-src.tar.gz](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-1.6.0-incubating-src.tar.gz) (HertzBeat 源代码包) ( [signature](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-1.6.0-incubating-src.tar.gz.asc) , [sha512](https://downloads.apache.org/incubator/hertzbeat/1.6.0/apache-hertzbeat-1.6.0-incubating-src.tar.gz.sha512) ) | [release note](https://github.com/apache/hertzbeat/releases/tag/v1.6.0) | +| v1.6.1 | 2024.10.29 | [apache-hertzbeat-1.6.1-incubating-bin.tar.gz](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-bin.tar.gz) (HertzBeat 主程序) ( [signature](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-bin.tar.gz.asc) , [sha512](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-bin.tar.gz.sha512) )
[apache-hertzbeat-collector-1.6.1-incubating-bin.tar.gz](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-collector-1.6.1-incubating-bin.tar.gz) (HertzBeat 采集器) ( [signature](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-collector-1.6.1-incubating-bin.tar.gz.asc) , [sha512](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-collector-1.6.1-incubating-bin.tar.gz.sha512) )
[apache-hertzbeat-1.6.1-incubating-src.tar.gz](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-src.tar.gz) (HertzBeat 源代码包) ( [signature](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-src.tar.gz.asc) , [sha512](https://downloads.apache.org/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-src.tar.gz.sha512) )
[apache-hertzbeat-1.6.1-incubating-docker-compose.tar.gz](https://dist.apache.org/repos/dist/release/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-docker-compose.tar.gz) (docker-compose) ( [signature](https://dist.apache.org/repos/dist/release/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-docker-compose.tar.gz.asc) , [sha512](https://dist.apache.org/repos/dist/release/incubator/hertzbeat/1.6.1/apache-hertzbeat-1.6.1-incubating-docker-compose.tar.gz.sha512) ) | [release note](https://github.com/apache/hertzbeat/releases/tag/v1.6.1) | ## Docker 镜像版本 From dc9743b7a5e51c9e1168bc5b4c1eb4bd26553bcc Mon Sep 17 00:00:00 2001 From: Jast Date: Wed, 30 Oct 2024 11:02:16 +0800 Subject: [PATCH 2/4] [Doc] improve website (#2795) Co-authored-by: tomsun28 --- home/docs/help/hadoop.md | 2 +- home/docs/help/spark.md | 2 +- .../current/help/almalinux.md | 2 +- .../current/help/centos.md | 2 +- .../current/help/debian.md | 2 +- .../current/help/euleros.md | 2 +- .../current/help/flink.md | 2 +- .../current/help/flink_on_yarn.md | 2 +- .../current/help/freebsd.md | 2 +- .../current/help/hadoop.md | 2 +- .../current/help/ipmi.md | 4 +- .../current/help/kafka.md | 2 +- .../current/help/kafka_client.md | 2 +- .../current/help/linux.md | 2 +- .../current/help/opensuse.md | 2 +- .../current/help/redhat.md | 2 +- .../current/help/redis.md | 2 +- .../current/help/rockylinux.md | 2 +- .../current/help/ubuntu.md | 2 +- .../current/help/windows.md | 2 +- .../current/help/zookeeper.md | 2 +- home/sidebars.json | 38 +++++++++---------- 22 files changed, 40 insertions(+), 42 deletions(-) diff --git a/home/docs/help/hadoop.md b/home/docs/help/hadoop.md index e12a44807ea..751fedf8fb4 100644 --- a/home/docs/help/hadoop.md +++ b/home/docs/help/hadoop.md @@ -1,7 +1,7 @@ --- id: hadoop title: Monitoring Hadoop -sidebar_label: Hadoop +sidebar_label: Apache Hadoop keywords: [Open Source Monitoring System, Open Source Java Monitoring, Hadoop JVM Monitoring] --- diff --git a/home/docs/help/spark.md b/home/docs/help/spark.md index 8bc045fc9a1..b637f8c8b3a 100644 --- a/home/docs/help/spark.md +++ b/home/docs/help/spark.md @@ -1,7 +1,7 @@ --- id: spark title: Monitoring Spark -sidebar_label: Spark Monitor +sidebar_label: Spark 监控 keywords: [open source monitoring tool, open source java spark monitoring tool, monitoring spark metrics] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/almalinux.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/almalinux.md index abf262d52bd..b679ae0ad89 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/almalinux.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/almalinux.md @@ -1,7 +1,7 @@ --- id: almalinux title: 监控:AlmaLinux操作系统监控 -sidebar_label: AlmaLinux操作系统 +sidebar_label: AlmaLinux 操作系统 keywords: [开源监控系统, 开源操作系统监控, AlmaLinux操作系统监控] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/centos.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/centos.md index 02a93f751c5..f88afd6a568 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/centos.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/centos.md @@ -1,7 +1,7 @@ --- id: centos title: 监控:CentOS操作系统监控 -sidebar_label: CentOS操作系统 +sidebar_label: CentOS 操作系统 keywords: [开源监控系统, 开源操作系统监控, CentOS操作系统监控] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/debian.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/debian.md index 983787f3b1e..f8e17448d7d 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/debian.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/debian.md @@ -1,7 +1,7 @@ --- id: debian title: 监控:debian 系统监控 -sidebar_label: Debian +sidebar_label: Debian 操作系统 keywords: [开源监控系统, 操作系统监控, Debian监控] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/euleros.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/euleros.md index 4c7324a3f5d..c12e8d9e7d1 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/euleros.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/euleros.md @@ -1,7 +1,7 @@ --- id: euleros title: 监控:EulerOS操作系统监控 -sidebar_label: EulerOS操作系统 +sidebar_label: EulerOS 操作系统 keywords: [ 开源监控系统, 开源操作系统监控, EulerOS操作系统监控 ] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/flink.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/flink.md index 79dfd76fd7e..13f94262b05 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/flink.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/flink.md @@ -1,7 +1,7 @@ --- id: flink title: 监控:Flink -sidebar_label: Flink Monitor +sidebar_label: Flink 监控 keywords: [开源监控系统, 开源 Flink 监控] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/flink_on_yarn.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/flink_on_yarn.md index 36e2508a52b..26e7d6e2727 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/flink_on_yarn.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/flink_on_yarn.md @@ -1,7 +1,7 @@ --- id: flink_on_yarn title: 监控:Flink On Yarn -sidebar_label: Flink On Yarn Monitor +sidebar_label: Flink On Yarn 监控 keywords: [开源监控系统, 开源 Flink On Yarn 监控] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/freebsd.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/freebsd.md index e2890cc3b9f..1e1489ac96a 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/freebsd.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/freebsd.md @@ -1,7 +1,7 @@ --- id: freebsd title: 监控:FreeBSD操作系统监控 -sidebar_label: FreeBSD操作系统 +sidebar_label: FreeBSD 操作系统 keywords: [ 开源监控系统, 开源操作系统监控, FreeBSD操作系统监控 ] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/hadoop.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/hadoop.md index 186baede498..c5f494b5764 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/hadoop.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/hadoop.md @@ -1,7 +1,7 @@ --- id: hadoop title: 监控:Hadoop -sidebar_label: Hadoop +sidebar_label: Apache Hadoop keywords: [开源监控系统, 开源JAVA监控, Hadoop的JVM虚拟机监控] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/ipmi.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/ipmi.md index 4b7e34523ed..d0b4eae6028 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/ipmi.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/ipmi.md @@ -1,10 +1,8 @@ --- - id: ipmi title: IPMI2 监控 -sidebar_label: Server Monitor +sidebar_label: Server 监控 keywords: [开源监控工具, 开源服务器监控, IPMI 监控] - --- > 使用 IPMI2 协议收集并监控服务器的一般性能指标。 diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/kafka.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/kafka.md index 8663360a9ad..2ca41b621c9 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/kafka.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/kafka.md @@ -1,7 +1,7 @@ --- id: kafka title: 监控:Kafka监控 -sidebar_label: Kafka监控 +sidebar_label: Apache Kafka 监控 keywords: [开源监控系统, 开源消息中间件监控, Kafka监控] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/kafka_client.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/kafka_client.md index 1ae63e03bf3..7010174a357 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/kafka_client.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/kafka_client.md @@ -1,7 +1,7 @@ --- id: kafka_client title: 监控:Kafka监控(基于客户端) -sidebar_label: Kafka监控(基于客户端) +sidebar_label: Apache Kafka 监控(基于客户端) keywords: [开源监控系统, 开源消息中间件监控, Kafka监控] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/linux.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/linux.md index abd87de1ef8..a9738d6af8a 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/linux.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/linux.md @@ -1,7 +1,7 @@ --- id: linux title: 监控:Linux操作系统监控 -sidebar_label: Linux操作系统 +sidebar_label: Linux 操作系统 keywords: [开源监控系统, 开源操作系统监控, Linux操作系统监控] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/opensuse.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/opensuse.md index 2f1e00a9e39..32c26af3532 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/opensuse.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/opensuse.md @@ -1,7 +1,7 @@ --- id: opensuse title: 监控:OpenSUSE操作系统监控 -sidebar_label: OpenSUSE操作系统 +sidebar_label: OpenSUSE 操作系统 keywords: [开源监控系统, 开源操作系统监控, OpenSUSE操作系统监控] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/redhat.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/redhat.md index 1c4c6b5167a..9aec2395996 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/redhat.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/redhat.md @@ -1,7 +1,7 @@ --- id: redhat title: 监控:RedHat操作系统监控 -sidebar_label: RedHat操作系统 +sidebar_label: RedHat 操作系统 keywords: [ 开源监控系统, 开源操作系统监控, RedHat操作系统监控 ] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/redis.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/redis.md index 0a0c9f77a65..d34ac3ca56c 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/redis.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/redis.md @@ -1,7 +1,7 @@ --- id: redis title: 监控:REDIS数据库监控 -sidebar_label: REDIS数据库 +sidebar_label: Redis 数据库 keywords: [开源监控系统, 开源数据库监控, Redis数据库监控] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/rockylinux.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/rockylinux.md index 35dcfae06ef..996d9c0c4bb 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/rockylinux.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/rockylinux.md @@ -1,7 +1,7 @@ --- id: rockylinux title: 监控:Rocky Linux操作系统监控 -sidebar_label: Rocky Linux操作系统 +sidebar_label: Rocky Linux 操作系统 keywords: [ 开源监控系统, 开源操作系统监控, Rocky Linux操作系统监控 ] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/ubuntu.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/ubuntu.md index 4425f1c2c06..300f35640b4 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/ubuntu.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/ubuntu.md @@ -1,7 +1,7 @@ --- id: ubuntu title: 监控:Ubuntu操作系统监控 -sidebar_label: Ubuntu操作系统 +sidebar_label: Ubuntu 操作系统 keywords: [开源监控系统, 开源操作系统监控, Ubuntu监控] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/windows.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/windows.md index 0b1791435f4..2ced2eb125c 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/windows.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/windows.md @@ -1,7 +1,7 @@ --- id: windows title: 监控:Windows操作系统监控 -sidebar_label: Windows操作系统 +sidebar_label: Windows 操作系统 keywords: [开源监控系统, 开源操作系统监控, Windows操作系统监控] --- diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/zookeeper.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/zookeeper.md index 9b8e3427f6b..7c69e9503ff 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/zookeeper.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/zookeeper.md @@ -1,7 +1,7 @@ --- id: zookeeper title: 监控:Zookeeper监控 -sidebar_label: Zookeeper监控 +sidebar_label: Apache Zookeeper 监控 keywords: [开源监控系统, Zookeeper监控监控] --- diff --git a/home/sidebars.json b/home/sidebars.json index 87bde91242b..122a4aa0b3b 100755 --- a/home/sidebars.json +++ b/home/sidebars.json @@ -269,43 +269,43 @@ "type": "category", "label": "mid", "items": [ - "help/zookeeper", - "help/shenyu", - "help/rabbitmq", "help/activemq", - "help/rocketmq", - "help/spring_gateway", - "help/nacos", "help/kafka", "help/kafka_client", - "help/pulsar" + "help/pulsar", + "help/nacos", + "help/rabbitmq", + "help/rocketmq", + "help/shenyu", + "help/spring_gateway", + "help/zookeeper" ] }, { "type": "category", "label": "bigdata", "items": [ - "help/spark", - "help/flink", - "help/flink_on_yarn", - "help/doris_be", - "help/doris_fe", - "help/hadoop", - "help/yarn", + "help/airflow", "help/hbase_master", "help/hbase_regionserver", - "help/hdfs_namenode", "help/hdfs_datanode", - "help/iotdb", + "help/hdfs_namenode", + "help/hugegraph", + "help/hadoop", "help/hive", "help/iceberg", - "help/airflow", "help/clickhouse", + "help/doris_be", + "help/doris_fe", "help/elasticsearch", + "help/flink", + "help/flink_on_yarn", "help/influxdb", + "help/iotdb", "help/presto", - "help/hugegraph", - "help/seatunnel" + "help/seatunnel", + "help/spark", + "help/yarn" ] }, { From 50dd262fbf182776f2c6f9fe1bb8aca1f5f92d7e Mon Sep 17 00:00:00 2001 From: tomsun28 Date: Wed, 30 Oct 2024 15:38:34 +0800 Subject: [PATCH 3/4] [doc] update deploy doc (#2796) --- home/docs/start/baota-deploy.md | 24 +++++++++--------- home/docs/start/docker-compose-deploy.md | 2 +- .../current/start/docker-compose-deploy.md | 2 +- home/sidebars.json | 1 - .../img/docs/start/install-to-aapanel-1.png | Bin 0 -> 85377 bytes .../img/docs/start/install-to-aapanel-2.png | Bin 0 -> 72798 bytes .../img/docs/start/install-to-aapanel-3.png | Bin 0 -> 24363 bytes 7 files changed, 14 insertions(+), 15 deletions(-) create mode 100644 home/static/img/docs/start/install-to-aapanel-1.png create mode 100644 home/static/img/docs/start/install-to-aapanel-2.png create mode 100644 home/static/img/docs/start/install-to-aapanel-3.png diff --git a/home/docs/start/baota-deploy.md b/home/docs/start/baota-deploy.md index 8b608fb127b..3750f36ac8e 100644 --- a/home/docs/start/baota-deploy.md +++ b/home/docs/start/baota-deploy.md @@ -1,42 +1,42 @@ --- id: baota-deploy -title: Use BaoTa Panel Deploy HertzBeat -sidebar_label: Install via BaoTa +title: Use aaPanel Deploy HertzBeat +sidebar_label: Install via aaPanel --- -Apache HertzBeat (incubating) supports one-click deployment in the `Docker` application store of the BaoTa panel. +Apache HertzBeat (incubating) supports one-click deployment in the `Docker` application store of the aaPanel. ## Prerequisites -Install Baota Panel, go to the [BaoTa Panel Website](https://www.bt.cn/new/index.html), switch the script and install. +Install aaPanel, go to the [aaPanel](https://www.aapanel.com/new/download.html#install), switch the script and install. ## Install -1. Log in to the Baota Panel, click `Docker` menu and install the `Docker` `Docker Compose` according the prompts. +1. Log in, click `Docker` menu and install the `Docker` `Docker Compose` according the prompts. > Install the Docker service, skip if it already exists. - ![HertzBeat](/img/docs/start/install-to-baota-1.png) + ![HertzBeat](/img/docs/start/install-to-aapanel-1.png) -2. Find `HertzBeat` in `Docker App Store` and click `Install` +2. Find `HertzBeat` in `One-Click Install` and click `Install` - ![HertzBeat](/img/docs/start/install-to-baota-2.png) + ![HertzBeat](/img/docs/start/install-to-aapanel-2.png) -3. Config the domain, name and other info, click `OK` +3. Config the domain, name and others, click `OK` - ![HertzBeat](/img/docs/start/install-to-baota-3.png) + ![HertzBeat](/img/docs/start/install-to-aapanel-3.png) - Name: App name, default the `HertzBeat-random` - Version:Default `latest` - Domain:Config if you need domain access, please configure the domain name here and resolve the domain name to the server - Allow External Access:If you need to access directly through `IP+Port`, please check it. If you have already set the domain name, please do not check here - Port:Default `1157` -4. After submission, the panel will automatically initialize the application, which takes about `1-3` minutes. After the initialization is completed, you can access it. +4. After submission, the panel will automatically initialize the application, which takes about `1-3` minutes. It can be accessed after the initialization is completed. ## Access HertzBeat - If you have set a domain name, please enter the domain name directly in the browser address bar to access, such as `http://demo.hertzbeat.apache.org`, you can access the `HertzBeat` console. -- If you choose to access via `IP+Port`, please enter the domain name in the browser address bar to access `http://:1157`, you can access the `HertzBeat` console. +- If you choose to access via `IP+Port`, please enter the domain name in the browser address bar to access `http://:1157`, you can access the `HertzBeat` console. ![HertzBeat](/img/home/0.png) diff --git a/home/docs/start/docker-compose-deploy.md b/home/docs/start/docker-compose-deploy.md index fb16819c6ce..c82f2b3e092 100644 --- a/home/docs/start/docker-compose-deploy.md +++ b/home/docs/start/docker-compose-deploy.md @@ -15,7 +15,7 @@ Run the `docker compose version` command to check if you have a Docker Compose e 1. Download the startup script package - Download the installation script package `apache-hertzbeat-xxx-incubating-docker-compose.tar.gz` from the [download](https://github.com/apache/hertzbeat/releases/download/v1.6.0/apache-hertzbeat-1.6.0-incubating-docker-compose.tar.gz) + Download the installation script package `apache-hertzbeat-xxx-incubating-docker-compose.tar.gz` from the [download](/docs/download) 2. Choose to use the HertzBeat + PostgreSQL + VictoriaMetrics solution diff --git a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/start/docker-compose-deploy.md b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/start/docker-compose-deploy.md index e1c91187530..3d5a5ba0011 100644 --- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/start/docker-compose-deploy.md +++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/start/docker-compose-deploy.md @@ -15,7 +15,7 @@ sidebar_label: Docker Compose方式安装 1. 下载启动脚本包 - 从 [下载地址](https://github.com/apache/hertzbeat/releases/download/v1.6.0/apache-hertzbeat-1.6.0-incubating-docker-compose.tar.gz) 下载安装脚本包 `apache-hertzbeat-xxx-incubating-docker-compose.tar.gz` + 从 [下载地址](/docs/download) 下载安装脚本包 `apache-hertzbeat-xxx-incubating-docker-compose.tar.gz` 2. 选择使用 HertzBeat + PostgreSQL + VictoriaMetrics 方案 diff --git a/home/sidebars.json b/home/sidebars.json index 122a4aa0b3b..4b32c85d93b 100755 --- a/home/sidebars.json +++ b/home/sidebars.json @@ -52,7 +52,6 @@ "items": [ "start/victoria-metrics-init", "start/iotdb-init", - "start/tdengine-init", "start/influxdb-init", "start/postgresql-change", "start/mysql-change" diff --git a/home/static/img/docs/start/install-to-aapanel-1.png b/home/static/img/docs/start/install-to-aapanel-1.png new file mode 100644 index 0000000000000000000000000000000000000000..94bc0fa2051796142ea50077ecf5812bad719b4d GIT binary patch literal 85377 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 AHUIzs literal 0 HcmV?d00001 diff --git a/home/static/img/docs/start/install-to-aapanel-2.png b/home/static/img/docs/start/install-to-aapanel-2.png new file mode 100644 index 0000000000000000000000000000000000000000..1b503b37880ca998fb0e068e9036b35656a42015 GIT binary patch literal 72798 zcma%DcQ~8h+t<=`QEjzq>!j4)n^sHJs=b9G_TIayrE0a*p0!Kty{lI35kf?$8HA`2 zL6A4PzN^3MdavgnO;66b*E#2NfA0H9$WtX*vU4=&h=_>D4yUdN#_7wgE`gpvhGnVt~qRol5X7(WLL646KzTM&_@ zpWyq)KL+i|8pxfmI(uH`A6%ym-d;`~`X3{o10E7nfqV5+@)8QHC?PFFEg$|h*IyHp zJ|GM|e%P2lIi35%vOkB?TM-3bB|Md_N#+;vCvK1*L4y8=r~yMzBEY>L5B|f0Kk4#) z(xs1||M1!l&ze&s*Mnf4cqi{+EfK14KrCENvYuIB@-l_yNN~ zF4=!9`BSCL!V{#LKb|A$SN}tq6MTao09@MKgh#Z&b9a5n0*`&Y^TGGeA_UyG_+h52 zfid`}|J&*=c|VqhUa(KSe{lMx*se0|pS}JZAfxxwOjO{5;B)^=8H;pjGNY1bB^P>) z8jXfz5o+@I;l|1X&PnuD|0$^6>|=eoIb!|^FdVs#fD&%SEd< zgYN6mI5b=*I&nsd=;X!cL?pldj6Zjh3e4YIClbV9e8Jwz$Iz!+7S5xdL|qc4d2b3q z1AbQYEdLp+duG5#j~7qn{{3~rO#1ABn2v#|IXnL)`$+`wAh{kVpEgicHoeL|)3ojB zj@%!pE>qnOYW2g%ZET1FK{}$~p zDIxdMV_Ww7tK1Q(;@*>0Yj6a7y=ktRu*4yH$JVa1pFVXK$+-7KUK$)@+=1B;(5`kV zVUrqV)08WSVW{KR)}ee3D?s!b#?<`L1{Y3Nl4^24@!#8&w_B{LMDq$7EF90?xB^8@ zx?-ni+}0)*nsy_}tNGe=sX>g|-=2GKrc@)Mffjr;W8zy?mW3T$(_W+cZvBnhhaG%0 zTgCm#p9T81&MS*r7u)zQ22f(+8WgCfJtqo7V>v7mfmZ|ydfX@F(O0pBLDnjU#eTVE zHc{rNvN2;%4-~9`9N)I4L9%|-wq{u>V{PL7YGDa#v^bxPGJ9oiJ}z=CSonu zN*muc&Ay~%=H|Q9=IPgg3bGfUolA9SQLT3Ads6K&dd_{*y#Hg`6c*T}_hCrv@OiT) zO-RBe9R?f<`mh&bWmP87que+8@~kdRQV}1Mb9tpmbMH4Bkmp;b68*h`EAfbz7=+4FCUiY=o~ zmzTI@f16EtG8Knr_YcxMy&S#hhV5 z#xC=s{<=nTd@a0jR-_t>SXF}KW?f@=foh)P&QxFo?aO#Df;;&W@|4DlzxL8Eg{~im zD=V*dyODU7Vj$+VS*}+gW{M2xz$l8*#zI#qv6IDqGlsBaU-N02XYAN$fVBXGM?j5M zq4nk2WmZyX23^-d*a_Nf>W=edL!Y;8UPC5GIY<|SYS?@GmB^qs(@s!>CHFL#T5czI^M1BK<{lv zL_c<_fIqO3Yd9*%e1gQrs$}2A3f!95%b65jhe=p}X`LejDvZx)*FxP%=`O~G-an}F z-o(u$7DBoDdtr-vSHr+C?M|b@Jd;?%L|Y!tB>Q$ho3|^D#yL$#kA?O4jq9vD5LK)M zA+dlPOxEtC%-=lk$NV809$%z-{lk8UGFK=9AJgni?vG1Dc-MOwm#lbYf;#d9DO2PJ zp7xDV7V?Spv3<$fi%*D9QcyW8WoP8jFBqY1IANnEVJ)@jn8Ko5<(HoWBJv47==8+srl9=Zgmfz z_Zo>WRh+WhSt~@Rk{w%bHO&iD@@9yVDsf$GtqIc$4+j*`6nFI6SPk=YYlp%<)_y=L z4v8TKuU{?a5#-C%DUw)^^~_RKN&=eEvyy4@Kh=A0dtYR|`yi|~;an!K^4uB&sb+8j ztT93O4Jq@^$NTMnu+y0{BfQ$~>u$;tTNSu(pED=+b(?#2ecf>alGd2#k7Vn$fYYmE zM!p-_z`ZS&TSc4t!(kO5G^c`7DhHd__5uflhS-JhYDcm~XneOcTAG=D z#?T9M72648M~6@2`x_6@qOVTq_EZ$`oivH&29BvWe@+|FuS6xfMW+c0X2SBaXLO98 zXeOrU?3UOV)AVhHqU<8>ZSfhmUBT$9$y2>t$ZH3Obma$GwQ7#(@%Nlq0z(@)4Yi7T z>ShN54>cEzLx{rQ_i6JT{U~rF>CgUtFaFeugv5#(Of%OE#D%8??4za|R_719?SWh6 zs%D@SYx@J};bL{tp=a$*XdG}8c^iH0=%~PN2Zd_(h8*Jj4};;`tNwNFRgG|pz~dA1 zJ?aA!$Y6hg_@*=;7qX!xes`#VRa)=@Bcr#8+St>pyu7@uq5Q^~-=?Jatv_^hCY-S9 z9=qwMQk~VZPmfhCdH6uR>eF@lw=H$Em#Vc+QQDXzrh=u_Mia{)i3jq;EpiiJnYE3_ zg?*v7yr=)5jsjbNE&vsob`bLYAYEKJ&v`i9g_8vO^xGb6U?(O0uyAx*6V?{nhu?~a z@6N5`www<4fcRl?T){QOz|j^Gok3gdbUM{5Owhoca4Wj4PR@X){py(k*2YGQidXsp z;ZSq3MDDaoYUrMM%nH8sk?oQBS+VjvC$_D&1NA}LP{2ZVveO- zx7%M8N82~;JaWfglSHDAhLH#Z;DH`?Pqt~r&f^;gc1Ueekjm&ZTjDy0fqP^9p8Yz8 zX*IFl&h8APn{RI4qE}`ui{8&~2j>kcA*|hf48nhC>80~Ow4|p77xuCjMHXM0D6XpC zeIL2=9mmBuUm=6aGA7OKz>KDO(L*WHTo2Mx&-QG5lSb>X2RCcRqF{`vvpcY-3|dL= zr=891g;^|X3)MK5u)3{%?_iMP{o312NlmuFKmVav8R)m#M}B&auz~CR zc{BrS(hd$)KSnl$1>Sv(4=j*^v7)f<*5~;TB49!j(5UE_QGRZ z5)(Xe+PBn5`zDvb_D|fN-41f(i5BEh$fk?*<>VE)mFcKYstN3mFHY>}THB=s`;|-@ zQJE6w_y&u;N!mFf4HXzNQjqwxU1KnTPj7u*N0qa{xZ6sO;Yo**Cs2V;708XZ7^S?_ zv{4B@Aa*ppDJMxig=CMKaauon1%PS_K^j5r)+$tR15H!vmfCweS=)*VBRPxK@AtHM zU#|=|x4z5~$E)z@%xxHD^d1uP&9Wc|E{lTVBzhUD^X_j-Y|xyMq}_Gs@)xW8^1SDk z;&EzJ8EdT5IYO7sm1$byrB?p=pupZJNXC+xm(6p9gRG^)E{?6}lxZVsvSo_I^uN`FLPrGUTOCDc+rcMe~hY5`d1Y8o(h8LZ`6h$(@ z9TIicq0FCT6K4;SX+mV++lE&s1l@u#tF)R;Px9++N1cmTd_<}@KyQoG)(3L;CfuOr-g?(fcA{AAQlco21?I?`@#ZdJiRJ$o}TnX%EY zK6^LZElQI=v7o2o3WaM&%|IVH1TXeIR!mG%k?7(QDX3E5G}8yj(_iUuO!jlrZ)}jV zDX}_OZQ#hh$a%wPtH0>gjIUTqc)eQBTW8k(^YVS1$o$EI8W)GAG=n<)by(Yd_F{A5 z9FN5;|8Gh7cu?nl%oE(S2EBv0p-+t0;s(?*2SB+j#^<{ggL&zx56w+e_kQO_o1<^{ z@|wKZZIHoU@s=lpBYfW0C@%Q!_S={bkE?|^F`?bLfsN^G8^J*2ur2elB~Hh8`-O== z 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 U0AD#DxC!_%I%BGb(Y25GAB`5qLI3~& literal 0 HcmV?d00001 diff --git a/home/static/img/docs/start/install-to-aapanel-3.png b/home/static/img/docs/start/install-to-aapanel-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd075dfaf975b2aafb2a9e0ba0075c36a07f224 GIT binary patch literal 24363 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 N>ZHwyLWo<$e*ls;JNy6u literal 0 HcmV?d00001 From bff75757db9bfba0e345edd593a9891740d57f73 Mon Sep 17 00:00:00 2001 From: wbs99 Date: Wed, 30 Oct 2024 20:07:49 +0800 Subject: [PATCH 4/4] [Task][OSPP] HertzBeat Official Template Marketplace (#2641) Co-authored-by: Calvin Co-authored-by: aias00 Co-authored-by: shown Co-authored-by: tomsun28 Co-authored-by: Logic --- .../template-marketplace-img/asset-detail.png | Bin 0 -> 71288 bytes .../asset-upgrade.png | Bin 0 -> 74938 bytes .../template-marketplace-img/detail-faq.png | Bin 0 -> 56070 bytes .../template-marketplace-img/detail-info.png | Bin 0 -> 47310 bytes .../detail-version.png | Bin 0 -> 77009 bytes .../template-marketplace-img/download.png | Bin 0 -> 74619 bytes .../template-marketplace-img/email-login.png | Bin 0 -> 64255 bytes .../hover-window-guest.png | Bin 0 -> 8228 bytes .../hover-window-user.png | Bin 0 -> 9233 bytes .../search-category.png | Bin 0 -> 104852 bytes .../template-marketplace-img/search-name.png | Bin 0 -> 74388 bytes .../help/template-marketplace-img/search.png | Bin 0 -> 96501 bytes .../help/template-marketplace-img/share.png | Bin 0 -> 63412 bytes .../help/template-marketplace-img/sign-up.png | Bin 0 -> 56882 bytes .../user-center-asset.png | Bin 0 -> 88469 bytes .../user-center-star-detail.png | Bin 0 -> 51963 bytes .../user-center-star.png | Bin 0 -> 107015 bytes .../user-center-upload.png | Bin 0 -> 182357 bytes home/docs/help/template_marketplace.md | 152 ++ home/sidebars.json | 7 + .../.editorconfig | 16 + .../hertzbeat-template-hub-web-app/.gitignore | 42 + .../.prettierrc.js | 31 + .../hertzbeat-template-hub-web-app/README.md | 27 + .../angular.json | 186 ++ .../ng-alain.json | 13 + .../package.json | 66 + .../proxy.conf.json | 8 + .../public/favicon.ico | Bin 0 -> 2540 bytes .../src/app/app.component.html | 20 + .../src/app/app.component.ts | 40 + .../src/app/app.config.ts | 46 + .../src/app/app.module.ts | 55 + .../src/app/core/core.module.ts | 31 + .../src/app/core/guard/detect-auth-guard.ts | 50 + .../src/app/core/index.ts | 21 + .../core/interceptor/default.interceptor.ts | 223 ++ .../src/app/core/module-import-guard.ts | 24 + .../src/app/global-config.module.ts | 49 + .../src/app/layout/blank/blank.component.ts | 29 + .../src/app/layout/layout.module.ts | 80 + .../app/layout/market/market.component.html | 227 ++ .../src/app/layout/market/market.component.ts | 76 + .../src/app/pojo/Message.ts | 24 + .../routes/home-page/home-page.component.html | 125 + .../routes/home-page/home-page.component.less | 40 + .../routes/home-page/home-page.component.ts | 64 + .../src/app/routes/login/login.component.html | 66 + .../src/app/routes/login/login.component.less | 18 + .../src/app/routes/login/login.component.ts | 80 + .../routes/market/market-routing.module.ts | 37 + .../src/app/routes/market/market.module.ts | 74 + .../template-detail.component.html | 277 ++ .../template-detail.component.less | 18 + .../template-detail.component.ts | 210 ++ .../template-list.component.html | 229 ++ .../template-list.component.less | 60 + .../template-list/template-list.component.ts | 270 ++ .../src/app/routes/routes-routing.module.ts | 40 + .../src/app/routes/routes.module.ts | 58 + .../app/routes/sign-up/sign-up.component.html | 75 + .../app/routes/sign-up/sign-up.component.less | 18 + .../app/routes/sign-up/sign-up.component.ts | 79 + .../assets-detail.component.html | 349 +++ .../assets-detail.component.less | 18 + .../assets-detail/assets-detail.component.ts | 302 +++ .../user-assets/user-assets.component.html | 192 ++ .../user-assets/user-assets.component.less | 18 + .../user-assets/user-assets.component.ts | 231 ++ .../user-center/user-center-routing.module.ts | 41 + .../routes/user-center/user-center.module.ts | 82 + .../user-star/user-star.component.html | 208 ++ .../user-star/user-star.component.less | 18 + .../user-star/user-star.component.ts | 226 ++ .../user-upload/user-upload.component.html | 169 ++ .../user-upload/user-upload.component.less | 18 + .../user-upload/user-upload.component.ts | 211 ++ .../src/app/service/auth.service.ts | 60 + .../src/app/service/category.service.ts | 57 + .../src/app/service/data.service.ts | 35 + .../src/app/service/local-storage.service.ts | 63 + .../src/app/service/star.service.ts | 58 + .../src/app/service/template.service.ts | 166 ++ .../src/app/service/version.service.ts | 55 + .../src/app/shared/constants.ts | 22 + .../src/assets/css/style.css | 2324 +++++++++++++++++ .../src/assets/svg/1-img.svg | 1 + .../src/assets/svg/2-img.svg | 1 + .../src/assets/svg/3-img.svg | 1 + .../src/assets/svg/4-img.svg | 1 + .../src/assets/svg/5-img.svg | 1 + .../src/assets/svg/6-img.svg | 1 + .../src/assets/svg/brand.svg | 24 + .../src/assets/svg/brand_white.svg | 24 + .../src/assets/svg/breadcrumb.svg | 226 ++ .../src/assets/svg/cancel-star.svg | 24 + .../src/assets/svg/circle.svg | 1463 +++++++++++ .../src/assets/svg/detail.svg | 36 + .../src/assets/svg/download.svg | 40 + .../src/assets/svg/email.svg | 34 + .../src/assets/svg/github.svg | 34 + .../src/assets/svg/hand.svg | 68 + .../src/assets/svg/home-1.svg | 83 + .../src/assets/svg/home-2.svg | 102 + .../src/assets/svg/home-3.svg | 72 + .../src/assets/svg/home-page-bg.svg | 1657 ++++++++++++ .../src/assets/svg/i18n.svg | 51 + .../src/assets/svg/logo.svg | 22 + .../src/assets/svg/logo_white.svg | 22 + .../src/assets/svg/mysql-img.svg | 68 + .../src/assets/svg/star.svg | 24 + .../src/assets/svg/title-line.svg | 38 + .../src/assets/svg/upload-bg.svg | 1598 ++++++++++++ .../src/assets/svg/user-center.svg | 40 + .../src/environments/environment.prod.ts | 29 + .../src/environments/environment.ts | 42 + .../src/favicon.ico | Bin 0 -> 2540 bytes .../src/index.html | 42 + .../src/main.ts | 59 + .../src/styles.css | 21 + .../tsconfig.app.json | 13 + .../tsconfig.json | 43 + .../tsconfig.spec.json | 13 + .../hertzbeat-template-hub/.gitignore | 33 + .../hertzbeat-template-hub/README.md | 2 + .../apiTest/category.http | 38 + .../hertzbeat-template-hub/apiTest/share.http | 22 + .../hertzbeat-template-hub/apiTest/star.http | 39 + .../apiTest/template.http | 56 + .../hertzbeat-template-hub/apiTest/user.http | 44 + .../apiTest/version.http | 25 + .../hertzbeat-template-hub/pom.xml | 187 ++ .../sql/auth_resource.sql | 43 + .../hertzbeat-template-hub/sql/auth_role.sql | 34 + .../sql/auth_role_resource_bind.sql | 31 + .../hertzbeat-template-hub/sql/auth_user.sql | 43 + .../sql/auth_user_role_bind.sql | 37 + .../hertzbeat-template-hub/sql/category.sql | 36 + .../hertzbeat-template-hub/sql/star.sql | 28 + .../hertzbeat-template-hub/sql/tag.sql | 29 + .../hertzbeat-template-hub/sql/template.sql | 46 + .../sql/template_tag.sql | 27 + .../hertzbeat-template-hub/sql/version.sql | 40 + .../HertzbeatTemplateHubApplication.java | 32 + .../templatehub/config/FileStorageConfig.java | 56 + .../constants/CommonConstants.java | 375 +++ .../controller/AccountController.java | 134 + .../controller/CategoryController.java | 119 + .../controller/ResourceController.java | 109 + .../controller/RoleController.java | 154 ++ .../controller/ShareController.java | 89 + .../controller/StarController.java | 113 + .../templatehub/controller/TagController.java | 35 + .../controller/TemplateController.java | 409 +++ .../controller/TemplateTagController.java | 35 + .../templatehub/controller/TokenStorage.java | 78 + .../controller/UserController.java | 93 + .../controller/VersionController.java | 113 + .../templatehub/exception/CommonError.java | 35 + .../exception/GlobalExceptionHandler.java | 57 + .../HertzbeatTemplateHubException.java | 31 + .../exception/RestErrorResponse.java | 32 + .../templatehub/model/DO/AuthResourceDO.java | 71 + .../templatehub/model/DO/AuthRoleDO.java | 64 + .../model/DO/AuthRoleResourceBindDO.java | 55 + .../templatehub/model/DO/AuthUserDO.java | 73 + .../model/DO/AuthUserRoleBindDO.java | 55 + .../templatehub/model/DO/CategoryDO.java | 57 + .../templatehub/model/DO/StarDO.java | 53 + .../hertzbeat/templatehub/model/DO/TagDO.java | 56 + .../templatehub/model/DO/TemplateDO.java | 84 + .../templatehub/model/DO/TemplateTagDO.java | 50 + .../templatehub/model/DO/VersionDO.java | 70 + .../templatehub/model/VO/TemplateVO.java | 63 + .../model/dao/AuthResourceDao.java | 81 + .../templatehub/model/dao/AuthRoleDao.java | 44 + .../model/dao/AuthRoleResourceBindDao.java | 53 + .../templatehub/model/dao/AuthUserDao.java | 50 + .../model/dao/AuthUserRoleBindDao.java | 51 + .../templatehub/model/dao/CategoryDao.java | 41 + .../templatehub/model/dao/StarDao.java | 42 + .../templatehub/model/dao/TemplateDao.java | 146 ++ .../templatehub/model/dao/VersionDao.java | 73 + .../templatehub/model/dto/LoginDto.java | 64 + .../templatehub/model/dto/Message.java | 97 + .../model/dto/RefreshTokenResponse.java | 40 + .../templatehub/model/dto/SignUpDto.java | 55 + .../templatehub/model/dto/TemplateDto.java | 48 + .../templatehub/model/dto/TokenDto.java | 41 + .../templatehub/model/entity/Category.java | 57 + .../templatehub/model/entity/Star.java | 56 + .../templatehub/model/entity/Tag.java | 56 + .../templatehub/model/entity/Template.java | 84 + .../templatehub/model/entity/TemplateTag.java | 50 + .../templatehub/model/entity/User.java | 57 + .../templatehub/model/entity/Version.java | 69 + .../templatehub/service/AccountService.java | 99 + .../templatehub/service/CategoryService.java | 36 + .../service/FileStorageService.java | 30 + .../templatehub/service/ResourceService.java | 86 + .../templatehub/service/RoleService.java | 105 + .../templatehub/service/StarService.java | 35 + .../templatehub/service/TagService.java | 22 + .../templatehub/service/TemplateService.java | 106 + .../service/TemplateTagService.java | 22 + .../templatehub/service/UserService.java | 22 + .../templatehub/service/VersionService.java | 45 + .../service/impl/AccountServiceImpl.java | 216 ++ .../service/impl/CategoryServiceImpl.java | 97 + .../service/impl/DataConflictException.java | 31 + .../impl/LocalFileStorageServiceImpl.java | 80 + .../impl/MinIOFileStorageServiceImpl.java | 176 ++ .../service/impl/ResourceServiceImpl.java | 109 + .../service/impl/RoleServiceImpl.java | 149 ++ .../service/impl/StarServiceImpl.java | 86 + .../service/impl/TagServiceImpl.java | 28 + .../service/impl/TemplateServiceImpl.java | 375 +++ .../service/impl/TemplateTagServiceImpl.java | 28 + .../service/impl/UserServiceImpl.java | 28 + .../service/impl/VersionServiceImpl.java | 172 ++ .../sureness/SurenessFilterExample.java | 224 ++ .../RefreshExpiredTokenException.java | 31 + .../provider/DatabaseAccountProvider.java | 42 + .../provider/DatabasePathTreeProvider.java | 55 + .../templatehub/util/Base62Util.java | 71 + .../templatehub/util/Base64Util.java | 42 + .../hertzbeat/templatehub/util/JsonUtil.java | 122 + .../templatehub/util/ResponseUtil.java | 79 + .../src/main/resources/application.yml | 65 + .../src/main/resources/sureness.yml | 29 + ...ertzbeatTemplateDOHubApplicationTests.java | 30 + .../HertzbeatTemplateHubApplicationTests.java | 30 + .../config/FileStorageConfigTest.java | 34 + .../controller/CategoryControllerTest.java | 160 ++ .../controller/CategoryDOControllerTest.java | 160 ++ .../controller/ShareControllerTest.java | 130 + .../controller/StarControllerTest.java | 178 ++ .../controller/StarDOControllerTest.java | 164 ++ .../controller/TemplateControllerTest.java | 143 + .../controller/TemplateDOControllerTest.java | 143 + .../controller/VersionControllerTest.java | 174 ++ .../controller/VersionDOControllerTest.java | 160 ++ .../exception/GlobalExceptionHandlerTest.java | 82 + .../model/dao/CategoryDODaoTest.java | 60 + .../model/dao/CategoryDaoTest.java | 68 + .../templatehub/model/dao/StarDODaoTest.java | 27 + .../templatehub/model/dao/StarDaoTest.java | 29 + .../model/dao/TemplateDODaoTest.java | 151 ++ .../model/dao/TemplateDaoTest.java | 153 ++ .../model/dao/VersionDODaoTest.java | 59 + .../templatehub/model/dao/VersionDaoTest.java | 61 + .../service/CategoryDOServiceTest.java | 141 + .../service/CategoryServiceTest.java | 141 + .../service/StarDOServiceTest.java | 126 + .../templatehub/service/StarServiceTest.java | 124 + .../service/TemplateDOServiceTest.java | 204 ++ .../service/TemplateServiceTest.java | 204 ++ .../service/VersionDOServiceTest.java | 167 ++ .../service/VersionServiceTest.java | 229 ++ .../templatehub/util/Base62UtilTest.java | 71 + .../templatehub/util/Base64UtilTest.java | 50 + .../src/test/resources/test-data.sql | 16 + 262 files changed, 25979 insertions(+) create mode 100644 home/docs/help/template-marketplace-img/asset-detail.png create mode 100644 home/docs/help/template-marketplace-img/asset-upgrade.png create mode 100644 home/docs/help/template-marketplace-img/detail-faq.png create mode 100644 home/docs/help/template-marketplace-img/detail-info.png create mode 100644 home/docs/help/template-marketplace-img/detail-version.png create mode 100644 home/docs/help/template-marketplace-img/download.png create mode 100644 home/docs/help/template-marketplace-img/email-login.png create mode 100644 home/docs/help/template-marketplace-img/hover-window-guest.png create mode 100644 home/docs/help/template-marketplace-img/hover-window-user.png create mode 100644 home/docs/help/template-marketplace-img/search-category.png create mode 100644 home/docs/help/template-marketplace-img/search-name.png create mode 100644 home/docs/help/template-marketplace-img/search.png create mode 100644 home/docs/help/template-marketplace-img/share.png create mode 100644 home/docs/help/template-marketplace-img/sign-up.png create mode 100644 home/docs/help/template-marketplace-img/user-center-asset.png create mode 100644 home/docs/help/template-marketplace-img/user-center-star-detail.png create mode 100644 home/docs/help/template-marketplace-img/user-center-star.png create mode 100644 home/docs/help/template-marketplace-img/user-center-upload.png create mode 100644 home/docs/help/template_marketplace.md create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/.editorconfig create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/.gitignore create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/.prettierrc.js create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/README.md create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/angular.json create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/ng-alain.json create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/package.json create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/proxy.conf.json create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/public/favicon.ico create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/app.component.html create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/app.component.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/app.config.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/app.module.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/core/core.module.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/core/guard/detect-auth-guard.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/core/index.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/core/interceptor/default.interceptor.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/core/module-import-guard.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/global-config.module.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/blank/blank.component.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/layout.module.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/market/market.component.html create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/market/market.component.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/pojo/Message.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/home-page/home-page.component.html create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/home-page/home-page.component.less create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/home-page/home-page.component.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/login/login.component.html create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/login/login.component.less create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/login/login.component.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/market-routing.module.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/market.module.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-detail/template-detail.component.html create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-detail/template-detail.component.less create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-detail/template-detail.component.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-list/template-list.component.html create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-list/template-list.component.less create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-list/template-list.component.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/routes-routing.module.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/routes.module.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/sign-up/sign-up.component.html create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/sign-up/sign-up.component.less create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/sign-up/sign-up.component.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/assets-detail/assets-detail.component.html create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/assets-detail/assets-detail.component.less create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/assets-detail/assets-detail.component.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-assets/user-assets.component.html create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-assets/user-assets.component.less create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-assets/user-assets.component.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-center-routing.module.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-center.module.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-star/user-star.component.html create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-star/user-star.component.less create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-star/user-star.component.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-upload/user-upload.component.html create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-upload/user-upload.component.less create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-upload/user-upload.component.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/service/auth.service.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/service/category.service.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/service/data.service.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/service/local-storage.service.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/service/star.service.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/service/template.service.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/service/version.service.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/app/shared/constants.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/css/style.css create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/1-img.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/2-img.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/3-img.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/4-img.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/5-img.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/6-img.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/brand.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/brand_white.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/breadcrumb.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/cancel-star.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/circle.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/detail.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/download.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/email.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/github.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/hand.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-1.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-2.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-3.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-page-bg.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/i18n.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/logo.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/logo_white.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/mysql-img.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/star.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/title-line.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/upload-bg.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/user-center.svg create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/environments/environment.prod.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/environments/environment.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/favicon.ico create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/index.html create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/main.ts create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/src/styles.css create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/tsconfig.app.json create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/tsconfig.json create mode 100644 template-marketplace/hertzbeat-template-hub-web-app/tsconfig.spec.json create mode 100644 template-marketplace/hertzbeat-template-hub/.gitignore create mode 100644 template-marketplace/hertzbeat-template-hub/README.md create mode 100644 template-marketplace/hertzbeat-template-hub/apiTest/category.http create mode 100644 template-marketplace/hertzbeat-template-hub/apiTest/share.http create mode 100644 template-marketplace/hertzbeat-template-hub/apiTest/star.http create mode 100644 template-marketplace/hertzbeat-template-hub/apiTest/template.http create mode 100644 template-marketplace/hertzbeat-template-hub/apiTest/user.http create mode 100644 template-marketplace/hertzbeat-template-hub/apiTest/version.http create mode 100644 template-marketplace/hertzbeat-template-hub/pom.xml create mode 100644 template-marketplace/hertzbeat-template-hub/sql/auth_resource.sql create mode 100644 template-marketplace/hertzbeat-template-hub/sql/auth_role.sql create mode 100644 template-marketplace/hertzbeat-template-hub/sql/auth_role_resource_bind.sql create mode 100644 template-marketplace/hertzbeat-template-hub/sql/auth_user.sql create mode 100644 template-marketplace/hertzbeat-template-hub/sql/auth_user_role_bind.sql create mode 100644 template-marketplace/hertzbeat-template-hub/sql/category.sql create mode 100644 template-marketplace/hertzbeat-template-hub/sql/star.sql create mode 100644 template-marketplace/hertzbeat-template-hub/sql/tag.sql create mode 100644 template-marketplace/hertzbeat-template-hub/sql/template.sql create mode 100644 template-marketplace/hertzbeat-template-hub/sql/template_tag.sql create mode 100644 template-marketplace/hertzbeat-template-hub/sql/version.sql create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/HertzbeatTemplateHubApplication.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/config/FileStorageConfig.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/constants/CommonConstants.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/AccountController.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/CategoryController.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/ResourceController.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/RoleController.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/ShareController.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/StarController.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TagController.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TemplateController.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TemplateTagController.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TokenStorage.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/UserController.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/VersionController.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/CommonError.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/GlobalExceptionHandler.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/HertzbeatTemplateHubException.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/RestErrorResponse.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthResourceDO.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthRoleDO.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthRoleResourceBindDO.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthUserDO.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthUserRoleBindDO.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/CategoryDO.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/StarDO.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/TagDO.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/TemplateDO.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/TemplateTagDO.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/VersionDO.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/VO/TemplateVO.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthResourceDao.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthRoleDao.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthRoleResourceBindDao.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthUserDao.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthUserRoleBindDao.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/CategoryDao.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/StarDao.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/TemplateDao.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/VersionDao.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/LoginDto.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/Message.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/RefreshTokenResponse.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/SignUpDto.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/TemplateDto.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/TokenDto.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Category.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Star.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Tag.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Template.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/TemplateTag.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/User.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Version.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/AccountService.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/CategoryService.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/FileStorageService.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/ResourceService.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/RoleService.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/StarService.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/TagService.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/TemplateService.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/TemplateTagService.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/UserService.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/VersionService.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/AccountServiceImpl.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/CategoryServiceImpl.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/DataConflictException.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/LocalFileStorageServiceImpl.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/MinIOFileStorageServiceImpl.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/ResourceServiceImpl.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/RoleServiceImpl.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/StarServiceImpl.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/TagServiceImpl.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/TemplateServiceImpl.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/TemplateTagServiceImpl.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/UserServiceImpl.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/VersionServiceImpl.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/SurenessFilterExample.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/processor/RefreshExpiredTokenException.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/provider/DatabaseAccountProvider.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/provider/DatabasePathTreeProvider.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/Base62Util.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/Base64Util.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/JsonUtil.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/ResponseUtil.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/resources/application.yml create mode 100644 template-marketplace/hertzbeat-template-hub/src/main/resources/sureness.yml create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/HertzbeatTemplateDOHubApplicationTests.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/HertzbeatTemplateHubApplicationTests.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/config/FileStorageConfigTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/CategoryControllerTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/CategoryDOControllerTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/ShareControllerTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/StarControllerTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/StarDOControllerTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/TemplateControllerTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/TemplateDOControllerTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/VersionControllerTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/VersionDOControllerTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/exception/GlobalExceptionHandlerTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/model/dao/CategoryDODaoTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/model/dao/CategoryDaoTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/model/dao/StarDODaoTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/model/dao/StarDaoTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/model/dao/TemplateDODaoTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/model/dao/TemplateDaoTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/model/dao/VersionDODaoTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/model/dao/VersionDaoTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/service/CategoryDOServiceTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/service/CategoryServiceTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/service/StarDOServiceTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/service/StarServiceTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/service/TemplateDOServiceTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/service/TemplateServiceTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/service/VersionDOServiceTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/service/VersionServiceTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/util/Base62UtilTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/util/Base64UtilTest.java create mode 100644 template-marketplace/hertzbeat-template-hub/src/test/resources/test-data.sql diff --git a/home/docs/help/template-marketplace-img/asset-detail.png b/home/docs/help/template-marketplace-img/asset-detail.png new file mode 100644 index 0000000000000000000000000000000000000000..53840b704b2258a5a719c19c49927051c6fa02bb GIT binary patch literal 71288 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℞-|vJjM4_yG}dv~xi`LBgIi{7 zhHgW;3+te4DWhL6f2PwWz>M`^JGRMr_5xM$i|CDpmLHe;vJFUqMT9MN(9>##5MtO!TLg2E+k$w6M&{^=ut#DZIHR zdM{SBiRy#Ij||G6y@;3g0A8XLcoiZFO5!@0f|(82*`v%f%oO$M+6*m>MW&tX3JZ9Q z6cvj%40eKY?tiU$bYt}jhk$bvzB!?ALn(Ns>QQ?6+TsgHO7@$K-Iyj^1olh;9K?WB zon>WXfAfsWC&uR!R&{mIiAQRRcRr~Pa;sv%nk%CVbw|ePa~IwAQWf9(*Cp+@fD071 z4${^*X52%+$<8y#k|$Qti7LPa&ZYnElt9SI(9q=oEA`t8d<=<&@cw_<2qHqI{$@C$3SI`9Tw8Y9GZO8Qb?4$ z@T8nG%&ohU9$*Ok-s#uh(pJuXDnrH%qp6wi8q-%el=*iBR9B zm`nO>TX<($W?qHNA!lpQ^;4K6PrQzr@U+Z83o;{jT>6)Nr60ZkO?w#+>+NmhTfdMX zrfBWzv|?VNW}(9irM{>3JuI+;>e4GpALWIh_2zVKHJ9GemB@6^6*cSG)9=z=j0;TgWBu_9W;C&R=RGW$y`B;Lhypt1IfsE9;kV zMm%No~_KXM(46`l~9mzkZdG{JiE)n2Sw)gd?WBdW%~xf>4gM1S+#@no7F z`#f0R+==_fFJB6~=D37}(2LQ{P?x-#s44Z^#Hw*rRq1g@<{J>!1^Lq_?NV7Oojg<` z{}xo&$tO%m(xUoOJ~TI01~xVGHcQ*l(LmlnPu;Dl`*Snl(?dw3`MPclNAWbr3}LDL zX1-zBsOxgRj{okCSS)EPJi4)xq65+YKFKz5{6q6nUgh;3-JU<_MjBH+$Hs0MU^?4d z`^1{vEX=Jc*=*5fYU(R%^L>_XKh?FjGQ+nnaNEO?=> zC303YKRY?QEI-Z6^-Tp2P^G~eAa~kd>eV4LMy&y?_}J)ZP)ej9XIPCmtIogW=(85J z8WbAXsUPN>Q_;$w6wOi zHoS96O8$0ZY{HiGKy&#!x9j|W=8~lhqzF(KC%vl{&YFRqo(5`qE*;p%i{sX2A-h*| z8%5P>i@a0cr)J)Hm+#{EUUSI|tT~PYDaF~;e@a!$HSYQI=WU&xybN;#n1KnRe<|~Y z$bU-!vpnd`OO6t_=0f(;wK_vsbQ&qM8T8BfgYLav^buv6UJ!{Xq{Wu!4fnJhrQK!d zL+U7@WG6w!)y2Wsc(^;ugkb0E3po6Ghy0@DXZL?&r|KclrIHtc!sMoA4qefBpv}-w zCsB>soqIXe{ zF~EyN$GUmmtDfv$X&Dhq>Z%)~j%F0jwIO20KoqqCg-PhD%?D)x*r>pzvysXjQDph~ zn0mB2!sr+B>3=s+4y}_0F?e1^E}MJxDxjL(ESHtY`4ro@d$r@`n9D3yO};c^OGC^9 zw+V2!w>7C78*0vx?4rQ1YbW86nVDJ9xoBB7Ld*JxM4fyi5WoI%eJXbmEQ1LY7%I;e z0Jq)DP+7_plYXk_p*i2z$rV4WmGOhAYk}qy$k@pRa;|HhNXN}i)IP1yd*?@u!{X5BUM4XMf$7b9g1d=H;#x}7TP8owwxRKc?z;=6 z4yo67jo}K#TsA7FAfWEOwKbdgNEfz!4`MjonZ7K{jEw!-MgEs1nMzrffd=OunMAV9 zA7-~=pDe`T`}_0hYXWC8PGbzy;tXM$1Fg;7{jGO>t(=~Kp&G``!k|0K1jO?B&z`NXt+lka z*4(~H11ee=u$*Dau+1jKo2Yslt}YrAWm8e9o_!qNz^4(^KLdrlAZeMobb;2&UV#>I z`RNoc5I(-9rH=Ei%}9yn4iJB*4l>GL2blbz#ZS{|v2$HLHeIbt8HJA;r&>by+868o zS?3ZnVbKUAN61|=ZgYJ(UdpS}#-dX*(%H!g$n;$}_+PBcPM2scO07yS>w$LAL?_7y zKVA6ZX!PDP-W@1Cv2L)KPe7&#uII$F%e+=dq75wO>!u%fS%ZF=pXX;>+T&3!=S&um zgY5Tfnvn1!r(dfThfZ_Um>Z(|g^C{=EaOI-8 z*OdTqofkH^17hCfBal`*B({0BY8&Wc^K*ZK8^^ifcfS@ zbTQ8Ibb*O(nA0_<_W`tJ09a-(of8pE>$Q)shd4u)=FExuq;%$#rtYR(*cEMaFJEYa z&Qr=1m>-_*v4`XIIuFf_K;v95O;w(m?7WY_nKQcCBD}qN(TOcX0S6ODk3H0IEo4c>76(*%2)tL1f)hqAWBbwP!k(4 zQb$oDp-n_VKtQC178L_RNCBh=5HO(!LTG`IoW=X@z26PG&-GpB`@ZWs`<(Y5{?I4S zv)0|#egE#VwioNS8Rp{U3GIRf(;wXR-4A_v{{Q=nf6|9E~RENM#d^SJW|&Rimyr-NRo7M<5}uVuG&h5LU!e!MYcjhtyv*dw*#s z4{Exgny^({zchKW1h{rYkf z4ZQ2bmuvdWvFQfUMMsvl%!58<6ZBIL%D|X1^_o-FPo`*B*Qoz0N>D8X_ElajCg!H= zuYtu|XpQ+1p+(xD{&?rA`z?M7Q83=_CaC)6mea{E-9MQ$zd=V*w~E0u^pSjU?q9=EyQ49GKaupj%*K|( zLhCe7=aqnQ7?8lP@brk|xH)b4^zT=_SSf_9;CD!3FzUtgnTw?T%&>Tn_v_04k~&?) z?q;!dUg=@_xxeiuBs#R1pq);YCZ}8#zXlFcpyHRJbHuSngD`)fdia5sUj0v+ise5= zauy<)%pEmp-6DAaIZb|rQ|E2yApLgFt&|(&DCuzo{3?}5$_n#PElvX+K#;)y7!2}H z*#{ju_UUws?nj4UCTJAsO_RDy`#}kG{6fCmg(v8rzIo$jN=84o=hj;A0vaj3=1&QT zd15_KS@;I_A2pBv3?9ru6!_v*V2auSe$C$_uYKIoxOtt<)7>A|9NVu%NK_CZS)XcK z`XHbD#FR(^H#FICZ809EZz(Tilff?jSvC0|4y#`z=iR#l?$^pXpA_2KxRvhvE|vF) z?Y48i%;s@t4v26b(~kGcWr2B8uc%)l2H@B9vR$RA;oUEXp7yj0u9_hgoHHf@Z9pJW zdZK-73|VWxyJ;El>@8*XEw_HQ^(=_6UV?ZK0#OFqaPm7fLDw$YM2z#m1|a30n+f5$n;v21qeP4 zjPo5;c6wwE-D46ax*gSDac4^>$y#9`CsROt^;b_f9;6R!5mhgm+dK14uV`z7HmOY~ zzl_j9U~B^-g3I#C#|o6H>~U2qN#~m#h<4f?ebpRAgB2qct;h2u>ErT#!I`Rgsw_R& zaL5@~ONW}YCxB;Hz7jYe(X6t+$NA(Ndj=6|>%gDSE9DNqcHV27$Mx6Lm0FWP&o6Be z*BzOjF*)h!H9KEUH}}_v(&|g~+q4F~rfb?;FZcSE{_1S-dxPu9^&LgIg|_n;E&XA2 z@TSx+Y0WBUPC}=S9_v3_gooMmSJ;Gt?f^!c`j`hI?ZJpU$9`ep0MvV8%(I{{ryQ4B z(e&C`T9t)-nak_y$ zoaj)~Yc0Cb$a}HMv6zU+2sFd!6z-X_ZOZ)}4DC zl`(F1MdugdieTStE<)=uO7Q%ei>1+gDu5ddQYIop34c4JllEM7>Q)+m z*h~M(cietCQk#EOP3`l7GC(t3+zK}}Id2pd4D>uctMZ^_<^cZVC>0F#M~@^to&8wcbs&a zdX1J)Ua({!%>}Q$68aTAu|zuaF#5wcCbjffLla)(6P}|t3##mF9T0X_0r}(hXV{O0 zv%>0+l5fA)B4y`efwTUS+)dt$KG95odN`$XnF!Ei0%3h=3BZzz?PFSWv=m>tndzLJ zLn8QMMt@C^nP2)=g|fuqKHmA=?sY$>$GN8sm&#i{ystXZbw&>Mjx*$2q~dL|^mIpz{|q#@E$Uf$U6^QZTtZ+Q=hE{7x%5)=%B{g?81gG2X<6;IRC4hRcqMl zA;CB2#z`&RJ_(NGC08DDK6~kxkq&l|pqnS56K^XvHqj7%zcAGc`Ufi)2XHtn*0{gy z)rk`)UcJlDvo^Np#qz!jIleILSp-uAqWRZz@aMqioCps1^+4_Gi|3{iNg5j1>E-u# zQ+NYr$Vf%~fbox&ipS_@rcs0MB5a+5*>O7kPf}8p5+03_E(&=~4`-Wi-@ZL-H(pZ_ zbZ^M7Lj{@@!O1@Km2Xfw!ipOv2)*j%Sqc5M`dG|D*Xs4H=>0^Q^cUyf$Q$_hJ=1lL z;EX5y;^zxWlqjm3H*X&NVVp=ZeAr(T`vHwc&r84hQ4_9G1a*%I&|7P=Rsr}P^G8b! zO*|UseJx`8yRanA!eh#+ntlPI0Q9j~mh|kUZ9cb8Az)-S3v~*OMRL1Jr4?M+a`Pi0 zH@&foeTWW8M?$Tf&t;U`_+$zhm;Gd*W)-`dDiBo3!uxH~XZoX{dnNZ;TvqzxtMIk2 za+mr%8oUwV9nt(D4pn1#u^_)Bh%~%~HuI}Mi6E^o<Q*4P z$YVsATi@B`F&$}lQxv&Q85IVho>(^_y`9%}mE8 zdpsfF#$#vn#{GII5b!AyI?}dA11Tw&o0*;QG)DYDvRxB1=CFQX7c`{lFGF~71!H#T zCYyABMJIm5^N$B`6OFkG;i2q{eqfrbakLqJ)_)aNg_-6q{dn*qLscaUMh{z^?~HK( z88uP8tj|Z&z}#wTl)?WMW6xF}6d zJIe3a{=&BZWTv7L!PKr`M5b2hHR{s1AP<_E%6SK@X&QM>QxAuTbo z(f5KJt0r`@vi%-sHlEUEoshim^Xpr9$%_%32(zj{<;B^MqkTpsg_wz7f=R>jn5(c| zNr>;B6oh}t2@|v_XJIc`^2NYGGs+S%zRKZQk?zOO5oQsUOWkUkwvw->TNG%}@VS;1 zkPIZv)@S-iD?@Yb-JQN;Yics!J(j~Old%sndyFz`W$R6{|Egy3LY`Ud)oCZI_~yUI zrmA$X?|~z_pr2WL;d^dJnc7)p&rwaQP!xJaI-<6b8{_+hwzLEW16Z-}= zf-@_;-Gkqh6nbqB`O!II9u1b;4U|Ekd<681Q*V#!YOEm%`TL!DoZLFZN)pcVwVYfXX9nDXB& zGjz7lJk&6S@_7xeM45}k?SSRdNd%N%*vi6`YroTPCNm#C{1#lOWLr=TW@4`0o2PUx zT1wyeN)J9S`w6bZ09|>^%;|DV^_}re2HKM>H01ZZm4jpPo z4d?bclThrnS`jm7_$6Txwh$%n7xd=lbM#&URbC_7>}bNHrjowju}J69v1m@jbA3ng zadO07Q~tY)#xU}PYTO5FWP$fi#h0Y6gknl%DwsWaD`_`j6Y@{6(qvtIg+nO%7Fr*@ zuUk>seIJ1s`_6hQ|IzlOPL;zPlqCDO9DeaQ`E8-$<@ur4-)0j@j+@fbZMY=06DKb8 zKiW6Nw&&-XXgI}euu*4B(K2fJNasXSc);^hG!u<)+H3d4Ales^W-)^2D#vmIXzkw} zuokM&3(xu=AW##5@;j$nEsPG;vIXsx!!t{_nL_`KVz`C2Q-&z>quFFb_cbRA5M!P^ z2i$PYKbWjPfyaRQfB5)^`nXV2WPkaHZ|n!XLz+0Uot~yopW)?5&dvlA{=!t$Q0X_L zn>Pw3Fa~kpzvC?>>;FjAFySwzJT~QX;t=A2%F$&$iKIJ0w9@!<8!o z`4a>0OQXm9lUIc%30-FHn zCTU9zEH*D@3Rm4Cm|?yQ(Q9=dd-17&qQEKr-GzrwLjU-Z?xiYqV1ue@aCxiQroV3w zrU|c26%2lBKTU<)#_rwlrH7Fm|1xi*@Bi)TvHb*hve89rj=x?pbH`l%MyWaO=p8cW zdP{shIV0gcq59nx+JMhE05nJ~x$1bLUd?F}4Q9qhb7-@L=IT+ahSt_*$FD7ED^bw= zo>-!8dq{J0IBWymuCtkr%?ntI-(a&oK{N!lR`DRH|esYMRRx*09xrKpwS@I`o8x!nwWaCZ& zDX4WWn>VkF-zO2|ad2HV?Bw#}oCXvARPj9aX1cC)cKohsXtbSx*G=+be4^KwXuP=t z3@uPcppzlU^!)~b?p#*CQPjkJy|kUO3krt5pL>fF#h$c*wA`pmZGK!QxM-f&^43YI z;F>exZs-C|C;ZY^_UpfcwjEPjgPRZ%?;<)@P~l+n#=)LLoXPG82dnv~H{Usu{XK;< zM9Xq+jt={TgN|gn5Vce_mI)|vcmq?OjZ+S4;xz)6KbLt)jQf#{H>d2A*3HnHXJc%S zj0d#uL0=soeH(5mswAU!al7G0TJ|<>M47*KZ;-Z&kB8!kq$erG?izS)eDT$~{u+dw zVSuOq0(5x3t0#m1iF3b^_aMZat7}j`r58SV;qj9Qw_BGssQhnx|G;mju^kN;+nJ)4 z5F6*rAMK_%m%2P(0HzrASw+TNnyDMfKm zFobUS=%)uE;Fia*%5X7pb6uiTX4^;umq9tO@{$gmyr%O)_FH0zO@Sh(n=ii`=*OSY z8x%0d-q!*NbLX@s7aej*4%O*&zj9@Iq$(;tHa0a)I9tzlnKxc(ZmyY-ay?>PEk0=k z!}AwaEPq>D*GB1kHcl20NvWX&X&L(AsOj{&`A5~c-IcClk&%RDe1b)WY?Ys&Yc)l! zvkb#!810}@Jo^lvEU;BJBji}cVxVCu_-j^NUGVB-8`-(7Hg6}bz1eYjd1&RuG^uh}LVKQ{ zG_V?vHY#3j?8>SsS_{LWn}-L?zUgndZ5}#Nvvh;bp@lXi$i=TN9s_4w)PTg2k=a+2 z<&t?>6j3j2`^XVVsQ&VzWz_iIr5swPV!}tM8LJfFPS5*R_k4AeajUmY&{~T=X&I!s z`Q%0^vt7{Dp<>e%o#{O3K`1hC%J9N8*%DnVu3XcHJsb6*y$hS9n2K8;^7o^q2FoISl-{ot}Zxi}+`seSjdHLprM%!rv<}iAGp>(-P!9dTSc3}^SX0)&0a|?Q^PAPb)o2^fttd_SP3k2nw zo}Mq41RxlBpP2NZ?34O8*=DWLPDe#Su4i;>VZl3}0~@xiw5J@l*g00dLw*BKTicka zNo|SS%Pmx~g8nI=p=1v&%0v#kj}r^x(Mwrf@!Rjk9HQ_7(oE2u@@41i^dS$XJ4vh;>8&EAdRoXAe9)M3g8j${c-!)5|c<>QN4==lyhg2@!)^b|8!9QxrYGT2tNe!hBt^^h(*qXn4P4cv?KDK1C}fqRqT_?LJ=PB;I$$IE^LB4U?iT30Hgv+;chLxm)$2I@01`B@%l2vlSARq#gUQ((@7f+#RAwUEruCRg*S z;8{dL?{?{dU@?QjFu-tAm&fNE#H(Bqe;|@sJ>Qn*P&R!OMr+U0z}blQi9%RdknEEl|cmWU;b2ZzX@5@!*nzf)gEq7 zrcwrg7&?+1(_f*G1@YN9M=oifg3+mlqXVVtNAZJ8t#fShOX!QIXe9G7KonXj^zG*c zgC?>K)({5}8V&stZC2o|f<0zgkY4k$URi|If=`7S#l;|~_?{pc zhqZ&b*NTIXwE+_g%QS~bN$6H30=!Sq{q{kNz|6tjbAS{&${f_x%vj~HGDNRMtL{iX;o91&SmLLOx z$x*0QY-KtM&+C+K38>g@f(|a^OT!AjCz!q~NcXoUlJ=C*e^WwNrt00}gr=3zk75g; zOV?-f+N_brL7?J6z6#iw8n1?e1a0ryz^P@Plwu5`z&Y)hDIX4ViiUo(2@+zy=5@9* z4Z+#B(|jv!RcmqN$he;!GV(0lo^y$GoK(e3B|i-wS6Ly>M>*w#9@Y^x~{uko7k8rTP zs5eX2^`mvZc0aQ**90Aa`ZvSEHbqxHCFy57VyaO{?BtE~AqCoFln*=iKqvT`0cYr* zri?UBdAc8D95c#U!NKgEgmXYjddsIhyQ=5sl5@s?vp}Xhvhac$R04-T;2Z?hSH%=v z8W6d*p74LH2dyS$*5L9hU4}^N4ff@4mDSu%do^=ZGpfH5R6s26+h-k=Z|@bZ<@bDB z6}5EuNAxLl_+eB7)3N5m?dPk6P8BF2Z+HxvVUMiU3>RR0$cXm-2n&F+v^aJQmPluh zfEZNyqmM|GcCE=N-5`>4b0T)guj!^C>hoxQLU}()0|!KS(Rj(jE+YofO49`PM_Scf z9K4!ElGU-gCfL*@LIkoBSB7HwVb{d7Hj>yCZzMsu*nZC`yZfBBe{WG zxH)J0f=Jx(7>YNFZ&PsF~`tqgfOq((i=kUxYnlLzuK5DPQmPfkuo zLA`V_qTY3S?usJQ6;1RgfF^_%5(=69q%h z$1vhK{E&MmQBWV3f|FgkzCx#jYiw)BZ=%zkm9X8f!_E9|096-Im(6*1e}tSYTmuz8 zpg@=+QSPA?9PtCe7LF-23U1p$lsPM3HKkNot*)+qQG1{y&*ph)>?`@Zo()V^(Rc@X z>amioXeJ8&Na?{uVXmVYi}!6d5V^Vugl8dmOg zf_X0;5X(wG9LdMAuQW_OF&N+fpKO7REP-6(%gYyI3t5?hPsBP5mj&Wy4lSj)xKmVl z^^>@EKI+>(04IJS!DgREW-$UL$rB1HN1e+* z-f1(6&)eI;emD~HIsYF2oONaXoq*h%wG;*bye{pnP^N$f9k}}mwwGJvcG(d1j1)iU zjdb&a&O1kxC`$m57|T#fh8|l)7MK7FP)|FI1_=qQ(LbdCpeoYn#rp29M+WiCY66JJ zs-6E1v))ms0$6i@r7sCWTB^}aKi!|YmzH;tJ$8IPYvAyH6F#cxvg27xXV_18Nr%4Y z!zhls!-nwhgOn*+jgOYew?op?t@B;?5jI`i=B zg?`om>-6AEgzAv*1KfZPz+>P5`CBEEf%~Db5q$5i4A8yDsWUw^-{eS}@^I${2qRAt zgDIrYsjhsg%lw^GJrK7ZE2Kx75rc!4u73>}y3R=FsXKZ*!Y^kvhi6E(ub{v}v$;_$ zWldF$#R5xKZBO_$m^<}NomlotUFP0VMT;=0uc1A9sL%c~Fdf5fG>Xt={8uAbr@LtR zBV5OOAHjqF$qjFy9;FxHUr`N9>A*RA1)xMic96=Z<&zt!Sw7&L)8kqiTL0m;>HJHU zpEoTm9K)Tw>o5|*@mF98YeQY16|b~Kt+;tQuAxsLwe;2X95cQmxnokY%6*SU0IE9u zF+Rn?)^Z?O?;qJDHPS*aDjAiorG|yADQJFf;qcg^7__@kJS@x z;hn1H9VxS~(Sj~ao0*T3LP~}_8LsoY>MO>=qjOJu5L0hY%Z!B?1XtuXr#xggCnk;z zTYobuxj`6|Z3`R+O2!7Ca{RM7;fNjiPqkDdI5)i!GF5_<&EYF}k0o*pPb*l;kC50|JS4Tru4{ivhNAe15^KGbEvdFL^{u?%5(FKIu z2~nJzTt|6?G94|ooxvb1qas1W+X zCin8STV>Q~wO(TdL%lL#D+lB={6X@G#S9i* z#iR$l3N-M147?uZTv~elyoRdx3=q1p?nJBW)u8h6P2KS6Ot<6WQH<_1UFee6^7P(DRZl7Tqi$W}JCUp>}wog?y_ z``9w58faW*TmNRb*L4qi=2K%(1Z3HIJqt_Tbaf?{1a#oFrTGH-=Ir`-y1AvX{YOJ* zpPZ~=M}eEakjWe-rWY;>Xl2@ zxAB%AV{*6hr#=rp2$wMK-y@d6@8-K~PsVWN1Pi@Nyj;j!`3C04b$823EF?UiN0Y$t z(qU=S&`8CG({6P6oK9;EBdw5YbDscy`i|V2`CiyX_EkeDB&TMOWeX)v4s2LaQgW&x zIbh;~g*VLIx3k|RO47nIt|QcgOrx|#HJC*j5BvZUSSz!@J)M7F9g2@=hEO+vWecS6 zP|@f6IhN&}XnuO!#PI35_DNRl2=%V1v<0+4y30KjPfh zwqM3Tvt+tBJVhr^ggGh-AD30b7h@O?_#@fFa2<%&29XbO&xUaY*Gd%5l-CIF-fNMV8gT&UV)!Js2~ zhW%V4)7>&Y)lfg|IuZ$puCm#3>0JJ+AW~|A&a`;;LnGiWZ(z@@z3ZXxHyW;PZru00 zw!4T}&#v#$H+QE&VQBgooel89ij_8_75D&V>CNr?Eq4)61OLIiI*k$R3pPVX>^C>7 zlR2U&iPJJRG*t92==6lly{iaBK~AV)7qlbVWW@Hc`n)$F)ATKeYRW_{rd?acf zLrc{8}~Y?tbq4?62+F#RoXsq09z)x`4A>N?MZs?yt`Eo4R!h zR85c#!(C@Tj|~!4;eGw)80W<9QvRpW4@=2~*>3Iy6!LBe{MC8}{dIRJQxr!cjh(~O z)06e}{BHVR_Z0WnRR!({pXJqtOsx{#Cz4h(ru217aC4)hMU9DwG=orX6Pr5FSJJEg z=D>R60I?Yn)vV|gATmS^&x_sZ=}&a^u>M2T7GBGPB2x*nTo1ew#~3t1#D>*|26e_0 z$v*H`UK6)fpwk0}uP}9yHL^OBD%kGXM$yoxc*`h&pgVM8?ykhMAqT`R1-5-^_JS`xnYat)9?fXu0ZobTjI6YA>Zbe;{glh8W1`gvDKqG!1i3wu>RP1zgoa&4M-_^7vkgh2*qzBs z(jPX8O$t1jNHTT}p_7JDN`wh_ZQrlRRtg+`0cq^#@0WwB&1s}36mz5y$n+;59*6t| zhEIblb@k`ZcX!Dw3*V-bRm=J`HKom>hvyRw=uN=gtT9kvEpv<7q7C{WWeac=FaLmu0don#B9uZM_P~_lXE+{=4Z$4rv z-2VA~GDuBBmY)FahvZo?9>o#HL&dFk%_8@a396Sk@$QiTJu$EdKZO>BcZPk1o3dJZ z0$p*l@Nz0v?F#8BAjr@(J3LQbdmQ8W?vgad`kEVvhHn}F$FeeyC_+avNGPPmFe>M4 zBgHA&z}c{TsW|A*NZjF1F1RSq4HoM4@906tDDyS+i>K((5!JI*<`g=Fh)?=;v{{@s8Jp>$So%$!Wgr$LBZl$jeT$g_{db{7Hx!8zDz6&v0Ur#mn zAmol({S)`lA)Lgf4RzL|hvvU=iB)4Pych5K+uZt+7N*(w*82S}=~MT`^52Z+taDU} zpa>yWt=_O#N^G!&X|+z=O`$o8`(0v#%M?YJ@BhkPr$3R#KfTp7Uya`H5@Nt}lKA46 z53Ufhu%}|xYSNYpHh=NW-%glYk$2l0c;c^}2v3CI`w+;j#0bfw)hpkyR#%m^M&ic2+VeTBELU zO*8V-&$Z#py$0-rF9$Ax!FjZydpX4;-hH+F?vc>?hJ;SWG3dy!Wtq=`F4Prd1=b^g z-o$7Jg{r`<`-<$ge*Ol%H1nP;qUPO@uEkE(8{k+oy*lvf@X%UA6qiLAN*%glp8?!Y zVc1{;+4*X#na7>wy>^Mo`k~%!Z<3n3%fd&%DwglEsDF?_erB~hFZ(EVpL+*%#JL`= zb^RVkE8}Z=u4(x8k-VN$O4w>o9HJl;TuR*-U!K&&6yltNvkg^TPoX)Fa>_xdb0b0q z3U_8O<+JTc)s9H#gU+ftCj8tip#*|kc}X!$*tozJota2@)gylUvi)m9^h~hTZLxqj zP%9Xmn`>6>tg%KUu>8DGAPad2VV=I)i3={pqO|5MYRblKubXEn5N!KcsCUo^Tm#-S5Df1K5d~?_??_T{S zKu~2|QGa`g81j4<*$CP{>Ykq z=JlzJJE*8CC&rp0VLJW=KKLK9hKCCuuSo-_SFp`y82Tkfms|>zCzu|9*=kBc512#q zMHkxlNMI&~)z!AV;tJbDQ+FkhxqDHK?P;PWQ5|IamxsS5mNVZZV&@TrbOQ@N6F*U& zSU|T;bf+@qpanbsPQdX=(u|6)e9X*k;vf{JnW3wfTo9Mv>K@{@yrmr-r#dD0-ok@k z0w!SEYAatX5c?cTn?)((iL&ZnGh{b{?ts#9rr#+(2`vpKBVe+!-E#qpo^pn=hVIS$ z=#hs#)p31XttdTqI$#@Z9wew06*ckjJog<8YYY2xdA64oJSU&_0NI#(ddb$%@zJZ_ zNFs8aKPW%jaHayef2pmBZ`!HZ%4G3=hz3;@D653~^GvypBX}$CvOjT!ug^t7oQ`mk zlRes#JVE4V;=&&mx<5QFvS#DT1S~8 z3j*twmJ+AfnB9?qGRM)&7up~A*Pzi^gG7?cF%S<1H?UzIE-PSc;aA)Pzze&pMz8nM z;G-X;e54mT) z*+KsZ)jzjJD_3!+q=PnX&aYLf9xq;go2#nh<%CW&<)b>6oxOA(&mxSyn%IxWg9ft9 zzjgv1NWTKgcY#eCiGYgrud}Tq+>{8mS~o5#Q(YRucPBY41ATAm$Q1;}wy@>)AAq%8 z-%H4wb2K_7$iGE3velBe)ztAN$Pw@kxnYG?cVP+lYQ^uVAMbt5iTSNg>O4t{zh=xw z=uSI8;vb*}7gB9fL6@1;ywdC=#i;~WRSPBbeydr4OnSIiy(32}lYA-#=4H&6L5?DtFNovQ7$tBP^6si$)g53&ud3!K`qRn}J> zN#ACtRqEoFXCDumX0rd*rG8kFt9RkN-?L`gd{yDhl1Xu6>epWS59jX)`kq^&-q&Q~ zAFkuS9F8>y`u{x@{^bgT#>VCUJw5;bKf^F1wv(?5O@;XF&f6064PPXGTf z?gVpa|5tJ${}+V$|Dw#lbx{8cH2X()_5a>*qABi}ao3&<{Q{>do3Ov#FE?_cm}L%S zUNWqFwj>uIm}L(I)XUmv8WDdX}qb==t+K^k&_4Qs%M6~6PYwfIPhS6d+d^Kn3 zXAM2Q;GfmBwY80moP_5klVHx(m*F_;=#_rlrKA{!Ei`QAEuR4wgNBGyIL<72>A*y``O{!%e|Hw-Zp+HCWT3dFc2s9avFE)Xj=U!o^ z`-j{^UX`Fn=*xnz{ckFeqTI6MMN(p_rH5Y5f9sbflVa&pQH+}LwG=v{u;f9aU9 zu~&b!fN@_EE_@aAVm2NOKxee2oSo<_L~vUGL@Bkd8e|R+3O{ke1Tn8TV|9|G2uj^G znyaR3SNIKkL9^9S1>%y6K$oFn4q%QOhh!zq+y+%lnC3ZG( z{0t(DN14kKuad=!B)y7xPC9U;6cQDRy=FwV2ym zu8Mo?KR=u6E-1&XluH^f{aE0PWvOC$F>|$`ntpv(-CWG_@lOcVU@ngdu8ntwL5(q7 zM!8SGR`pE7XX(h}j& z((6NBU8^n^Le?XRSU)cT(=m83LV6d}Sh&Wf5$Zk8^4;spg3QB=2(VYwKoC#QfQo{pS970QFq@qnR;g>X)#>Xi1ePhQ&(lMNOFYze4j}6axGu1;X2JeN5nF+# zN*2z7fs6Bn;^jihTON-${!8vV2Nv(cL-2uV(sSCQ#pwZruxQCnC}Lgw6=r!f<0+_s zqy{baVW`wSA zD|4kXp#IaRE4*S|W1v7s#=y45xz>X!vOJS|1sVn100G8hwl5qQfNN$;;H_$JJvK%2 zawak4mA*CM5h`O7bT&i$H*n{{kQGe=8g?PDH(;W}+}ym~l%J&H5Pb;TAfT$_*>yoU zn+aWgQ8EAF!67gqlcJcBJ0lvBCLdii7cs;_#!v!ScfvsEbj?r#g@O9k&#&5$D1_A> z*YxQv%MaVcFxp02lzkOY4@QILX~YZ+gN$z4`qGE+XG^iXJj815@mz*#u=iNZN|SXx zXbV^B+=cl)=$tDu9o&tyh!Zc4Uy&h<+(ew{Y605f5cbD$@lWm4(e@6RwRCU9h5$M? zF3wtSp7eadp8GCUK~M)3{i%@i2z0ZvUI+6zs2tQ-9|l|(n}D5TUF3(aOqI8#T%^=Q zucX6qA{^M7ol#c42IQ8_7n1SWVQE`o?ech*dCHn(8ZM5;tbpr+;QIRZVMmTx)cOtA zQ&q{1thq+TjQ0{DEN)*FRYC}EIIuT7RW0yi*VWFv+s-~auCCcR8~_F@OdU5yJWfdL z&azU9a)aE0ttZavQ%7?luoEv?)jzGOzX6r$k~?;+-AR!f829AKlcNqZKDd?MaVmr? z;H1n>Y^t(iEjA}>kj1Ohn8~i+-N3A5>5K=_*}AhovyZf}l|Yl=ts@&Gi~=g>&#BhT ziB_h`3q2kTBL%|RZ@p=2ANC9ZwerIr8K9oX&iLJ;B#m-N&Nyrd*ufh}`pfz;n9L$x zAbJCgi8L@q(&QzIfIreUOhM!Z^$*ouo-f=4nOR+rldnEqn&bgX7U=I^5({3_U*^?Y zA16yquew?n+1S`PyM6BLT7Obnnu>Ab9%w+cr+6%!Aq%I)@7nE8D{~#T*@S za(cSRy}%h1Itzf|cV`?1Jwnmt{ULd}vqLee3UF+7wGYs4Qcxwz<)7!h0 z28G9$VR!%jmv#=iy4J>c#VX%Q)Lw|y($cclX06=-Lem)# zg3Cqh^N|I6FoNZYLh%GyH1Yeh@MfH_0T(vgs0jKfD;AN`F|8<~KroWAb`WDl6(~JE zI>7|Zdpij7@<_pETp}O65;LoW#Z& z8i}<}9|R)^>U%brDf0KhBCCgY(kN#5wZnX(Bflz$ca4|B0hUzN_NX+xp}sy^ z@@I;_;^NXv2I<*r?eK*oK^!`{?MpH6nMq%)cIR_wg5SsLovH%!5#(Cs7Fli2pqGds>1{MEB|_W$jpL=jM0ymE z+yX`3EudF+b(*2{s7=RwGZl=4*FDJT99Fwm;Rp(sZpH5=Tz&m4_ycfiY+qjH-M0+; zsrs>-Iyee&WZ;UJtr$2xBQ>oNk@WfDnh%p9JneI11~m6s8cdaFd2|4`VZg6J{zi|+ z^e^Ezc9#O90ItFz8>~zg^K19n5vEc@xg^?t0=zA;ZN|9@C!&}Rq)p+@9%wwwcLItI zZl4uLR_uUOU%dt|0E2wMG((8~n%f9Lf-L^cBA7HNGWsiXtj!}aDjDqB-Y?$b4GZL-jiQ4fl>*>jDtun?Wp!biqK{1oj@7Pig2+_M|ygI-f}%=)n~eiNVCrX^%mlr{0rTeoI)@+Y?6I=(S48%fGFE&#~`3 zP;J+JmS#I5nmqaL@gMG%kGK$-VXT{SCg|mXteHrYwECHxowkqaM8YhZDKs7WI&?98 zcG=Cm1kft==z6>Ro-|P)AFSd_!kw}TNa-S|?jn*JUte|glOdqX6k=QM(sb@|7(P8L zA?j0e^JdKag4wQP!M+hF{X}CJ?!j9ptyWV)0##DZkg(l^YT;5f-!XN!6VWk{BLjKj zyZ&3>G+xC}lRWq)eYoXudD3$Zll8F+wbREO>HVnl-bBm`Zx_M63hf|LOEvOc6(eLYRq5c3>@r@Jj#FrP7dP)jn0v`{qi=N zI+D%e`zU08sRu?1A5~EO9ps4B1{UvYdTn06+Pt?-CoI^5WQXoAdkWfB)iv>o?q&r@ z`e7YL8X+_)y*U!goqWSsrY+z#rl(X+(mPf6luCd+&E^lP1d*|>!k1d|v#O@|9nUsv zeuhB$ZxU#)U8Mp_ez`Z)K9BFT-TIR_iJ4k(CR09S^^;5STPEuz!a}vxwql`YLdE?% z$bpUQJQsrI(^^Qe`I)BZcnW5IpDw;p*Q__pc2_A-DYZ&N0@twQn50qi&Yca#btY(= zc%1Kk+5>4Vos8aUq(X|>>kBZ6FShT8x>oCnwW6;`kDNBtoa7kA*ZnlwEdUy_8iNLH zz{n_VHc_#-1B^vXE;z3UxQpI@Q50Xix@oef)L^H86()wth|OK+RMd+wR6sVUzi!G5%>b~TTbpp#<1!?{h4 zRz^LjIU-3b(v_^(+Q42yBWrf(hWaNW^uhp>Da5zj<2ZInm_4ZrS*{fi)8%OgMyf&#?tMN*8^hJ%GUi-U z{@e*U|9YKK0@I0m{#YlG0I~yh{r|~s{p*pxYwEw~vUZ65OBntS6^0`g>2KZ_7Z=}H z*iC;ncD7PCwRtT<%F^Ub>b8DF5~H#oumHk+BXG~a{;@UOWvZ;#&CRX#)o>^T;sc67 z@*@5j0^NCLN1FmT#=ANz%QP3pPrIq ziaj9O(%iI+&RB6Y7TlH$`_bHm5R*7jPz58G0#rxSs&e#c%xp%cS6^jm@VnaZ6`Oqf z#}=Y?#A-XhpREj6N*PYIVFG{>Qp*qASS|tK-MMW5QSuA9RO?5H-ph9AevWspWVQhd zdw-pUJ@Ol&GHfmrO4C|s)?l13jt?`YouPx5<~ZM~kbqx}W^#>4p((opT?(ge@-N^fiZa;#-q}0NOowPM@{E|;poUC`n zRq$_M_g=6Uk~A7&6adWZ`!)pedqcw?&65$HZd;6{Q=WnY0$6CQV9{V^2v|D3XehmO&O|6=G?Mm%m?kML-uU$Y(eQ2Ps znLTFZyeZAmzvWbMd%G^4D|8|_v?B4U2xsoF;n7ZC;4SJ7uHV5KzmYUdx_|2#^YXOx z^myAnoi8sJU2}6gQk`-{WjdGJ2f+*m*sY^4DlwGd2RRFvKwsdI_&cy$Wgocr+b zxmIyjC(jFVYdusDc}7iB6Xzl-+uK{_MeS5}DD!NHm!}E*%`4TN)<6s}lf&8f?YBO` zREMk(1Fh_GRHM0jtHxRi4D5BMNUvRz792II9K|^i8Bt9Hvy6I5a!9WQ4@@DqTGsY3 zggWyNR3h?B5lCMFAlH9>yj?Gw!*sOsq<%}kar2S%v5_=_d!9~6e`UZ#I7mb+k7et) zgPxnj3}A%HS(DdZlzMb#ow=l7sxc|`kBK=Y023{}jNiV7t^aPKaXtxPs+`mweN7z$ ztwOuvBj#AQhOIP%z{#NA-u{l%HAXUTZ1Cu|67^`7-XIM%vC`UDtymBEC5%uF1A$q= z8C&|ook?(eaIODag8=~@Ao>QDF2=$^$&rUuKo5Y}?v&Nu0k*%L2BgTL^rm%)lKAr# z(C%{(k&6q#LMX6IT-14OTVb4 z5iYEQf2Qeslh{dNZhsnq_<7%Y;cslc$4LmEbdh%Sed{5=7qvA>NgmWWEEkPXI2lL;23owY=9@c1F6$5u7YqosN8P=d+r5IY7Z{ z|3`CI8_xFG#euo=?vgA9DTO=f2NMnMQQTpTdtEnA$+ck!DIlAmSli($s05RHOTO3V-EdnpS z7|<65yPCe4YgN3(ae}hJgjHDg*={rk?KvK-Js)fbf<;Ol`Mj)8>Y9@Qf&<`KD>0jR zht%%X?4}#z2k7Pjx)1bJDl!!*y-Ex5Bs`XwYhvn@(i~E_+-2~B_v{!nUtM5?p1G(7 zYkC{P2ahowBp9LOLIpxNdj#al4qqY$v+a4!y0?NAOq~oZ&OJF=T2*8-_)@{H=@msu zBC+c`@P`b96zIiN7au!6jfNk)K0h+_?P(l!*dw&9^5po#igwq9*~!8#X4!zvFxdXX z|EVrlk;fn23}x9)NF}w-y*d5ka4`S@IFDFC_!WX+^j&_sn7-}L;0<_>Z$QTMQ=kPo zTabSBlpp)4Pe`AI(6li9uc4WUtN#Z-GTvukFrKymC;tbQThcmKOSh@b^z{z5FPf6A z8bmWYW8C*@^2mNC7_MzfNVF(*;8B`nj)OAcJ`jP zSCe;I?^!Lwi=rlay2r9xoG*!JtQVOqPvgzbVx*6uC#6`HFs;z+3*^N zjE#!Je1DbT)`}+{k9B{wm1=FngW66cu`5j1^M9Gj6%_u_#Y`(Xju1JGA#Yq=(0V}& zu@ztS9*;K0&9u>Lh~Qh$H{W_&e4;;Hpxe%*uJ8j&+a9srKG)RxfvwK=U-m@xa`Hqs z;JM_PHp}S}|B`66uPZVp=^7jjGP(Drb^kBvz7eMCLD6H&sZouCX}*K~ zT!W3fZn$HdYDdO^Y;otJ6JvP?x1pYmXSne#kw+fP6vuwZi;thbD=@@!ZHi<8uC9u) z@5J1n^Eu3buF;mVBx!*#?!KhmfO$`UGfL2T{=kglRHhBi)oxBe&vm>$MaMcpqX0^| zUz@7FjA5!TWU97Wom3;{vZ)LKL5&|-+0y-}f9$Y44NV?Cd^%&OQhyWr+?vbPVG>kyKVC01oaKo^lJhdmBSb5^?13KK zRbfNrWFW+u_9^L?$b%VOqr-yy-1`N0wp~f8d~~2=X}r{esuO$*-a$msQUH3`IlwhY z+V4eJoHiDZUjdvFF6P&84K2Uj4`^uJ8oS@hK>vd_*sdmv-J}9 zs(V8(4aIuo5vB*)H1dwyBaaJwiK;(feTihEdW-AvYkq~Q(p|*X+sYO$*CbCZNpuU% zQ%vdboOakpD+xqe#gA9pC8m-kd;bvXv0M_)xzEo?i|nBM!fnTNlxII*=DyojR@=M0HpCV)SDH|&8oct=BkxXzslucKT=#$C3_>*$9)5-S_(vWj*cqsIkk6jF= ztLMzkHmlA`u+I`Ix1PJ9FHC{LYsE`j17zk}XzpGcJaRnJ$fN0&25n|>v(25QHhU%- z;;&bI!WW6WDEir5{y5c0N9Rn7*eNQ?ahg7pH=EXH)voj67JVqq+rV+GLQ!Gqm_a!d znRvc8n@kSsp$U^T()Hk%hZ=&k#b#1lvqz@vSU3J_uXIA&B2w&zzdn^*cDtjjy_ET^ zK=))(HoPJvOjJpec9Q#Cc0qZ|0ysZO14r}eF7!yR+BMH^GAP|dw_#N zP++N%97lRiT~HN&;pW83`i`I$tFfDp{WUh80RsmH$$#aarJ03GOmv-&%udr;iXbBo4PmEGT8L@6z+7V zdkf$1YR6I<%5!ryqnYu8<+=8JM?Q3$0cG}vWYPgvn3BQuf&-}yyS_d$P=0A}YT%k> zORlXnS*rH`^*X`8^jKqpo{fA+l9E{48<0y;n7C^+J)Xi^@nVkbu-iMhKgjgjURf%} z|4(#(7e#lz$Qa=Hn~=6r?pk5&9F!eQU~FE+#Z{o+j{aeh1ccL zMmyMeWq)GCmX|U9+yCjyuR=o9ab`B?+?IxeHFpm-fD3u%s~Vy$9E^XazV!J{YKRr8;XiU87xOfkJ^?92lM+--$5c*` z)NcoiKA{zAF_%>=jxVupYQ^ucb#w9zv+A~Wd&BZHrsE|&L#&8L*La(qJHyg7Lq4kr_rqFB%gHcpB#-N<>@&j^Y_RHEInW(NNK8YS$fcH^~{l$e^f{EjJ zRLjG*pH5)ihZt;`!7uW+8KC3 z=d~!Kt7Y~)M5r`;8@?TBjKss;fB+o@t55A=>uY1!4(<$7WTuSnG6U0_wRA)Fs*+z< zY`ytS%T0(^LPLriZ0x`}W#4vx9v0J&v$%*d*w2V%ZdPn37zRQq)0(&<11w$%ZX`PR z%hEKTY4=6RtHazqZ}?XFQ6MbZSfv-W7>7yVWgTD$-moEijosDRF#kn;nc)qogV`F4 z!^dbdXdOKRm3oesABVoZ0TU7W+-l$fQL5%k?LI&LYd4oCu=S#3a(M!!;lhYLz>qB} zc{I=Ycz-=u6Pn*VaG%zyrdn`y%D{O^HZc!*&`z68G*|W4h!^EsvKk?jsZRg?B{{=#|?c@Le literal 0 HcmV?d00001 diff --git a/home/docs/help/template-marketplace-img/detail-faq.png b/home/docs/help/template-marketplace-img/detail-faq.png new file mode 100644 index 0000000000000000000000000000000000000000..a155258d8ba94d1e0f2669fcb1cd12f1351e0566 GIT binary patch literal 56070 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 I{K~EW1&U>a+W-In literal 0 HcmV?d00001 diff --git a/home/docs/help/template-marketplace-img/detail-info.png b/home/docs/help/template-marketplace-img/detail-info.png new file mode 100644 index 0000000000000000000000000000000000000000..8795fb34bf4ee724cec57e08323d9fcab41aed69 GIT binary patch literal 47310 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 KUbP2L=ll(=rv6U= literal 0 HcmV?d00001 diff --git a/home/docs/help/template-marketplace-img/detail-version.png b/home/docs/help/template-marketplace-img/detail-version.png new file mode 100644 index 0000000000000000000000000000000000000000..0e5ddf13cbac6080117ded18d478c1e89ce0c481 GIT binary patch literal 77009 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�JIf7Z; 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�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

FirdFuJ0#;6i{9H}!APP$qpF0w$v~wts;f zMR%v@TweQDPMKhAaINMlad`#AT)MU0y)xX_p+6YUXq0b{xWTKqoYKOKOZV|qvxtR} z^}SvE?1(w*<9zj^aMb6)*mp6y^r@N53o?o2mC;ltYh+{KGRlK;@t_fCWOW+?8_a+5Z>U zY&ckA{)GDoZrFMzPjx4H>tDuAjbro`A3-6#anVD$fOuMO?%Py@fluI7)iZZWpxhpy zoY=Ch`97=&x@+COf3wSOn6@$cq!>XYPfDXLA(S3|t2xv+iC#5&P)cF!N%DQ5X5^LO7FwYJOa zZNmD$Aofw3D^818*5HHoj-?TK-JMssBZ1`yH(~6aPOX>KUdl5^YI*9E9%r(5b!ULP zCU=JADjDw2kH<7K-p}7H!8^FeEl&hr%LDwj;4#p8B}x)y2ZZnNEnIp%YZ$9FzN=K8 zwuxn}YISMBYCa>z7b(-cweg0|pjejw4vq4e0vDay?ZgeHFhS6YU`Y7Co*v18JXl|K zlJM0Q^=-z=g9{@78Kfl4_Uf*l4>-W0{ zHe&)ekZLZTZ|$gn%WPb}G=%8Ci$07qCj87apT`zur6tZZB`BBFtg!Ii>y5r72PRYh zpg1dQ!*Gb4qmTrsN;sHjDHveCR_sJOOp9PB6edmnQgxIfDVWq(AyuDmg72$u0AWg@T+l+bmu;Pw?O;~+60Z1&!S!+~aeY40 zg1qcsKH@;*yo&}a9o*1rA{=Rej||jly6$n1X*#|2Sp(-k>06M#6Zm zP6P}D@$eww#DZibftiiCVhtj+30V!5zV*M$hDE z>0YmQq062o(1k&S&m@p*b9uCLKKRo&R$BZ;D29PddT!h(_!gme!8~H9N)!?fA@25E zvW45oZ4Y6@^qehvN7SDcG5$2VbvW0p-;%o_$E7)Jsi!_`X)uS+yI`p=V9cPZsjNXn zH|GoqrKJoGi(X85CnzyLm|3gb!*?&%(LT5@qiyXhZ?({OUEkM*&9WUUp2%s)dKa^e zzL%^R_1olM^<+Hor`-KL%NRQd=-$tZa z^LuAg`)vZ`N0F^l8|Fu3&H0MT`xjD|#Qh&Fdc0hQdre*4O`1PvYsxk2vb(G$7Tm{H z`ZafXHZ0{9YmpbR;-cddqmSR-(5}G)d`f7FVkW3T&K83 zOuN8+0GtAB`S5)LaF^{BdnOZ1Dk<4khE&uQ{=bI+iviF6pBHT#iTPIWx8!JW4->K+ zbOCUpZ6L-7FvPKg7;d^72hjMx>zIjGJ0$V=lwVULA3OL4O7c&p#8ez|$3Aj|K& z!J;35yN($;f0G7zP}ZgPZ$Mq&q<&Cs^QHstb884K{oKZ4fodv+w(wV)Z;R-dVNZvd zfTVBNp6oj;?d&x1jUQ^{?$sE8{O+@9R{ZlU_tVYkqcOZ%-`*jnP0TM7vi>oXn7HQ1 zuj+cr-fk04Y}?3&_j8^%Xa@7Ssy{c{hDkHtn}qut;&m-GAGM|;OTOp)Y>$~&^8F=X zeZmmss^Lce%`wwYqy0CJ{iVK7P5wqe#m}`Yk@|q-i8%8m#oC0e>J-WQp27^h#Ag}0 z8CC3I<*H!bpN-%KZ*2g~m6fXkZ~+V|PuSGegez1X+*vk}+KfAJ-QJJ|(rysDzCR_1!{T_9_`i}^e(ixQf8VnPr`iocCfr^-jz1>kAc_h!T9u$ zME2i{S*LvS?Yr(CA*d@9<=rV%T+im}bmoRm821G!aYB$^Pd; zH(W(zORru;m`aVQ>30KkX=0u$Tk;Fd%pSA(n&JeN&-%O0>q^gC*EYV0)LNn7+_v71 z{xkX785|E!S$06LM=h_P006lQ9rygNyX7r@U7q&+7me~@7fU9-P)1|~@!touLJzYF zTfU=voC0@fftbYD8*4Kz5c3Nk6}TD-lh$G4`5g6&1UE^f1>xI%ivRIHFvyP)uT&zg zOM+Dlu1lb3;G`L0{fR*e+jpT4;DQ7=sP7R*lgoB%S#Vll%ugn)2%w^n;(|F~JYm8^ei-gn1tEoCCxhvPDsB8fFMGrN^AY#xn_wmzX`uNq1F}ZH z>MS~bWj-bEpe?wY7gZK|PXQp~Js(b4@){V_N)YpVwzRu#Nv3q%uj0*HcL%lI5nWdU z8>8CJPYg6tDRoQLD>A;#y3AjHy*I)*m@Z@WV9b}~`5~z&`KI+`nAB+h%)|!+=jOK0 zz$U=hU!n+K-U3&R2>bs3;zBu$&2vac=}8}n@5cCL$4g0)I6C^KEq|rQ|K}2Uv_-1hEoU*l7X)S!;j_Mx7iP0J`<(-&%izb zbYl2MkCcw)z#siB`+|?v$>?IZM9!SaS-U53)Nkq6b;fGLRp842_WbdGvG?9#O{MMn zC=QNTP;?LwL9wGEpwgtPsE7)vj38Y^Ab=1d^cEEbm8PPU(4+_=U23Q*0wRPeAT5y~ zp(jFs(2|^I;mkMsee>wTYcKlgp-5KTDSYw-0zGmMIc zUk@iNNi!UzqY@GYB^rue?fvlD{(M@=2C=dFPnwt2n_y6{wyzGfBZc!PfNvQ45afK{ z5&rj_0A<^MZny)z!>I>&%oakpsxh zMK^%x3wYRo`vLTbs5o81JOnfNO&C$p7Y%U4x( zk+~c1){3aG*hlmz1#N6b;~KwScf!r~=Ehmcw*&mSZYUpfz8;L?$45B+3j=Ar0QtV4F5hxO_7xi+(+nr+fVgFQ$Los#JO71{9h(TwJZ!DyFtFlAOrI=f z?peB9tccd1$z854B|)wSOmQm^s2T#rN=__pIy!c-$2b`bpDy!{H!Q1jA+Nj1OV_eS z_<{k+yKpfgDc0)>WoB69LZe$%EKjK8q;zW zTmtU9zwkstQq^H|9gsE*DH&$hJAjYCApn>j+d_}REd=DQOgw!H0sNa_tk9M*w<=$y znfojvOo_~{kLg1dfPez%v^Goc-&_YA6hUZ(awHIK9dNcDSX95gk9a{iTDTN}hX%MA z0TMpvyDT-PQ&uJ*>M(#wh$I-uSg#RDqMGPSKE!IlOWi`m)P$s^N6XA1|4ndX(aRADL-cJUY6|#t_i!BhKoTNjff+c}8s1;!dNy_lpq5l2q^r<82^tI1H>faBVZ7p^BuiXvTix49s*>?&!(Ywf# z5N=)E@)z{`5->5bL|BYVvD7LVBklP!qHni!5a)Y|k-rdJwnPgC zH{7;J{uu#Fv&$3R4WX*Ag{tPih$S~&Jc64z1p90J(u|Kbj}<@6i^Eqzul92oqUv_{ z0YYZ%S+LZB|FIAbbq~*_r z2`>LnK`^^oj{?pYh}rK^ypVX=ju7=h^RLFGp)U2R9wvPNvcOQ?#qx4u!?P2)=dC`S zkm`zT`@oC2fVc&ifeVE5^F;Tb6mY$~P^Y-)BWtUpizI;`tOA}O+BcZi0UN#Dg#tb2 zz!TI8MJW)EfV-u;+q~9g%M5Aaw@+0jTytz5WIvQNkqA`K|)uS>YCJc@(kWLA(Jd(9o$D zL);WaMuNJ=3HT!jaZgO0u37PA5AN&`3{?kFeszwq!IW*yrNbVeMNbfvg%%$W4IJ{U zu4^DxQvAm2j6f^9yMr5n05Lq>%?EBEn?(g7lfqO#J#mh=@vm3{06d{oL!Q0rttyqk)I+0;~MWO#Le zY75(BA0l9#D+jP550LBiNO=p(u?rck0j6phxkWv<4R-rb#@gE!FitZ2<_yrep0H%J z14xcMGM@n~9uz@x#8ttT{uWdtb*WzP`Pqr|LLl*TLBNe;(ymVvJ9DILGvOW|qkvz& zbO#|<623jK$Kb2;?L|;$b@VlXf(Zi8H=6TmF#ocJF8Ht50w@A^ycARKy0GWGCLESJ zXxzE(!;Mgy@L(bI56Ur|(kS$&0{eH>WO>laM|OdOWBSsi!98pXLG1042?Gqqdp|TU zo{UcH{1o}f7UZ&fPDmZWZApOa3fd>&jHMA^khSE!N2y2jD=y>pu#)@gda8g_0Ltzx zvWMmX?3)3oC%(~*HSYgs=*DU;;8gKnR`_Qox}Sl_?|2JoB7jueegbn0w(=oGm=QI3 z@hjlkw9vP>%40yJ47@M#On^;m_?mz7Ndof;h>A8_Lt!fM&4>@$n&&Yv3#6z?E!oWN zPJ_C=APuBR_RbEVsR1GGF?9?yAk;c{p!0*tBxQ35Dl-|u8uY^3mz1`Mrw}wba0hk> zc)di%Q~upM=Lnq&gv09QXs+hK-qps(N`5YW?1HIy8nu8e!N(2n8QR}Mlbtcl-=Ld^ z&Lg3R7MLrFy|I_k#hV#&ZX64SB$1ra`S->hj1*_@a~;RA)tMJck{czHDp($Uk`-@R z`x&4GDmp0%d}$!Kaf5{z@KXQqtNV8hT>QqrPQHC$E78-u2&)efp$vHK9b-uCDe)SC zFJwD_4+&-4f8L<(A8LD12rmG(0Gs_&WIs|j3WMnjQ2n}3(8t#;!44-dtC0k>gp(Xa z9$^4V0?MKLh!#AB;shpcfR{kF(Uf-8{tu-5t@1b#m>bK&6e|+?5mou z7a<`*O**`%`9SeiLpEQt{iTw8_L(vMe8YKcKreTRjnwd;nS6smc^%Wi+w?`b47;5n z3O?i(@R0AaUKKP-I=0=9oYDIvQ-R9_PxCQ@{G*4gz>XqJu>A;*cS%kL)M+62*Nv?w zm_h|!nh16V;Adk08d2AurJ))$qy;D_S@Fk-g8L{yf~i5w8ekx@a0F4~+(vEvOs-!t zoy%JI&0@+7frM%{Ant}Z6a=UTC@`Y(2T*G3zHlVwf?O%u7o`&QquCs6cLxHf;s1)b zA5YnZIKjaw1&bUYd7&hLlL!ao%KKnFui>w2*DkSXI5Pvq{+mx5<%Zc{D7xk(*)ynA8wGND?<(t-Z_ z&q97!yOLnbMYEenr7N;zMIh(hL{VYrL`JfWxDJ3j;bbs)Ld@!ZknsP*K6ww~4*LMi zmMt%xf$IqFzif$D1^5&!*&cvjSpuF1C_jh509FAP52bu6q$GC>h!{64BvKRSY(dQ4 z@Q0MYc?S%w5VN%cJU9vpf;1g+5`eIOLBTKXhkywF#d^SM*F7L5o1X|JdM?n?A=UFj zYYTo|kh`-Xy^?W?q~-&ls)B&oi;FuC)3fY%4Lwicq*x@wXgX=h96+!PaXrfc<1+9; zy=?)qC}_|QL`T338$1X3JG=r$znR$mL%Uz43Dv3$LYfD|pw9@v6VKbWIsxj=@|_up zg1}Z<+pNTg^v(#g?>Y$fHTTt>i)u%Dc5vK*IVjYoqLj$6XTb3s7lZu%Lv{t%I%9A= zSp6U}GeF7{SSd0B6{$st1bz-aRBHne%XAK49zzR^7(KzQ-$toKd;!TD2u=d0?@=Dh z<0{@#H*M2fa$VL{cvxky&E!<7@M;OrrLYsc_ z5NOvJ4-J*nG58*+hoMi+uK&%%4*w$9^8Y{&{Ea%M{+FEW5XuZCf4MhVdFoQu_^wmqTs(@7?Qqo4kYx|J1wsz};=jwFUy>0pOfuf-z3zd@v>dIb!Vy z)eMGqJ(zOowkAmj^~c<05h@T+{>R>`LvAGS{Zo~+E0tO%?CVgS=ea7qJceF?BFj5E%pZCW3y50hvpvDG9XR?FCFL( zoN!v_2B2s?3nn%JtHD{MA8=s{bunbFM+MBU56P34{VgCUhkG7@U9GW=LBIpm8?z{nAJ zRk*j!>AKyKaL?c>E43X5gsP>KTvFfMvuPVN#Y!r`z!Cq2(A$b=*5T_#U|nz!9iNjmYU zFMw{+JHd0NGZILZfAD`mbx%g=9+A3Wm2^WoZ60w;8v>%(Rm6Deh14(LS!ZqK*E_fY zsn_2&aNB+qG^U{1N4UG27lFn`_aiId7Qh&D$zta=LRGtcwE=K|WJ;THAIfAO0(wA7 zxD48}am3)NZeKGuQkoW=L4M=Xhr27c6X4tbq858!5rvGHD}v@OlQTj8w3HFhWH{>1dBzykL@nC} zPj}6O&R&2#Di61w2?Jf9pzOQDP?B;N2SVE;3&}772TEK1C;&wvb%V?shFTMrs7!an zaL^!Mr4G@2n2aOt%%C-di~vKWH1O{2jBMMlE_GV!6@;kA7EtIMfA$9S5lDT^z6Ca; zF5r`Y6-G=D#gI%4H3iWBvY|Y?j*MSG1BJ2y*cn(FW=KVhFjUr4;AjxQ5E(4F=#Rh! z5=6exfq^?602FTy0|x}~`Xx%q;8MH?4CfF+3$C;PRs}|>xl{}C(Z48&L7{oe7MkBL z-~j}{AoaqD@6G90?=aF>7*RwPh;0Ej1%Lsm_m;st^X)t7uppe3756BB)pj3{lKIUE@;>6Dwj1%HBZ0G6EI;tH z65vxn(Io&>Q8^0@q=5ayo9-_VLVEE3%muN6kMh_1&*--1KqJ6sKxYdrZ3!YtzP2_` zD8N6X{{dpK4sIUhk_`x4qS6covr+>9s{wohRWuIFhNY~brMVBypAw8_l@NXiKxa1) zLpk72n}K=9|BJTuB6NkRTN+5U>QmlMK=WfN1}wSJYanwp@|v^D`AhC<$rz zygL07G*=;iS)B>`O73Pb+X_UGu(LWq;{os;8XyFk0N-{mbpWq^^Lqnk3?wipFE9T? z`e{CbNWi=zK|Gj@^cd;@vueV&0bGoRqTDzlyw1O}@4J81tP{b>|ML(1bxBVfi7V9-xi)oM-HDCxF5pKYe|7H7yZnvt77bK;`iDi|( zN=~l!mi4dPci@MO*T8NhGLLp%YWFAd=&u(jvZ*vgJ(ozhd$!89tZDyGZD(jf_w>*w z#h$2Mvfrq4Vg0X1+kc`~ok?3I$>-L(dBj#T#d5|K#S;^{2O;o(+GvoI7&Y z^3%utR@L9B_qOyg%f(Q%DYajsl@;l8>A99Mxs9yw{%nysikZkw*4mFYT!#}z=-WiG z15fp2Gked)#Kg2FYj(Smyj$a28>f`St&LXMXrWfXcZ@#6`sQ`{1ifhL$!gcGp^l6w zjOVp(R(X-POB`*)H*#+2MOV0Du&gPY;qkLiZ5~yEDaG8QIal@G~lVOd1&o=jw)D)GOoRH^n zLFg$P??$FScGlnN9lcSt;_@%fD&mqEm)_ie)395b^R)}N$!W>5FAJVjhxhA6tOu&c z)q{eBOy`^4HTqDc1Z2xEJXVQ&qqpg9i=@f?^x29#YDVjJzS&k0$7y__b<&shIbw2; zT(6sFF)Hb-y0tjR%RGy^ur-pUH|iq}S;aW(dYG6v&JU;5Jbv^HzVWIhNn<#Dox;#F zA4ANjXJ%9V-tBM?Gv08eb;>t0Z44Luxr8yTL4|VVhenJ&Y8hOOr%s}R8?(`=+94Na z-y}CC(M&IJZ=Cd-l@l56A2*yol`-orv=|AI@9EE2GNr?JJHYRw2C_!z%P?&kUBlup&fn1;aPjne5~SZh7{Rr-ey4Xt=4vF zwHT#^v0U4ZOk=#`Ko1^cI>M($=?_tjT`?;f=k+Q#S4v!i#v0M9u<6;f$?sT#hAFH- z$pg7}J%S+#3F{6g%8N^8$-kV6>RvG)(_>E%A;_kaW^XaP_cM2R&()*Dtc+I?6fev> zk1sUN9t|PWf*z0t9sQ^bIgy(mj6H^*n|p9l-`-ublVal5cem=b$6$;rl_;j%=~ALA zlq6HABF)3HxOrTvggZX6*kj;sW`Vw>l6PBIN|uj{Vn|whX4yiOUThlE74PEY6zxzg zXu3!ikSrN{g`Eq>%EL#~R%K4XA+%~w*EeO3=w+2qi}S9HcjXJ1dQE7E#_W==Tqkr* z!mcvWD0HXqy2*!Ui@72q4cpNupDS;6R?xfsLntnBKA4u8majD=dz4nxR18zO=~~ML zvK~WesvGUqXwtt<`D=!{q$%rMPN_z`JF{3oJIbqh0_)!1&}%2oJ+;uO{94j%qS1%c z6s>Yp@50Ru7X8&h>LT7#5r@oOy6p<5FywdlM?11Y3Jb1xK4yu_?64L?Cm%ZhLR>nJ z((X@5%FV@eUcGqcNO7d%Sc>SlzIK z3}SbY@9yEk5NF9~d-)%>zzwfjT~j;JZpMO&Qd z8@M4NKRsKaWb5QdnW7b&s?ej*-B@xJb|GfU%w$0%_dy|UBQ7eh+hEfodTcX`xR-T! zpHEr8yZgXw4e8RxD<|d%Xdle$Wn6)RQkEdskswL;M_R?Yj~bFZj%H2mDm!5J@r2qc z!r8C`)|au%XL>exUOjl?xYRU#(OYP6OSoQSzXQoC?7CZCHQVQvLw~iW2O&n$wYS*W zx>mff=atiNi@%7^?BlZ%kqXW>9&;^cC3_uew!o@1^XVBiBOe$ak2kZV4xQWO?R%jj z#PNg#)_y|dbI9Aq3{##dAMLI!g(Q)IGTKh>j~im@D$+JA>=>z{m-AMuhddSQC}qCp z!7iGosLl_y6ppJ-NUF@=4Gs?P&q!F=ST;^nV-NKY(|gzq_F}QEl>j|E*4=ViK!sh1 z?i%eK&XA)mu+}tIl$MnxmYPi%;#B%(NeO-HegOih`?HFb!&LMsjDvZ!+r?``lTR^D zCMTDjN`|A1ovjp+*lh29iZ0V(#2X`h+u8#^o-8ioXdlx|B>If!clb<(#sv=7Z&%hn z+cG(2pJN%I&F!KPA35(ndpjk-MTx!UY+MwB%nXeii+Z}?eSk?FsqS6IeXFUIbDp5F z7URgi(T&zTpi+1&S&jds^VB`<#Kq>Sw?1knl{A|}VoJ)VFcw;w%nUo^K) zXo!(p()e^cvpP9^_(DC3%GgTiE?ddjwE3ik%Fr`kYVl|$qjXUDq%ASex>a3e@=@7L zm#q)7ozATha&7*__g4y)f2M~|OxJ5BH*Slf%XJXipP?l?x8Q<=)YihOs;_HwX<*X* z18$T$I5a+M!)KI+ui#vTA76R_*PTI%_+yR<7rvPc?S!6zsvWS#rRDUH_BVGH*5a?FXH@ z?SzkGOeC%HK(_}dQBa6qFHj0 zMf3igQxo<)oU}l7Mp7Ed+uWm6NaTXNa$}@-2Sg?2NVq49DU}hXTR#6%sIKHeBj#a~ z(U{9dRxU|-h{QLJAJ32~cWf`b`jX|MM&HYh`sL=MXGW2U#N;@d*PvoekdPdjSPBQo zZE<#@Mi_HW{kJt_w0IdC8;9=E+#hG<+kS@vD=F;t_05G))!8>Zpm@!#g_9>b|AvGWWpn-MCiUEb#>6s*dcmGmAy zYh9`|nx6ZiyIMuhh+zcJ;-Md#;{8k=|4??J`lp4oSclDnokb*TDK-wO)hQa02#x5F>N(a{rHGsT+@!zpX!-J22WaHXRLe$ zzD(I0h-O5#qrG@WPN9;09&A(`)aI{#yf(mOM98MK|CXd(OvU2+s*3x&nRh6Og{ufr zx)uC5D{eVy)rC5dYv^F4omW; zcC`#XRJoNcRKKq> zoYi1b;gbjfYQ;Qrj7s}(&<(ZqZrs+_E2ln)WktJ@?|X}3%$W1j!=}e;ridPHY!e4n za$a_kFZgBPnv|vzxxF9v*m1o9fZM+9zKZz_*pTkb$+E zeH|WV-S^8dwl{D$801mCZ7%wVe zs;@-ZQZc=TM`&F!_05da9%G>ed}DudTg-4qaDkqQ&)h)K^HbYhc0;*Qx0-N)@qtb| zWhF5j6}p0lFwiLeR%c_&q|LC^oNBSi?gvdqvgh9iklLoG{vK$85p}jVF<&Oj)2wnK z_{eY&dbU55H8Lg{J5xAu&rqCANM+mBg^5on&T#SWQJMSF&JG(INwe>v=X=_EP1otn zY<3-T?q~=uR8TBojf9#8FW`SR7~>u8zmY*35x~oKG;<7{fWjFR0(e7~j2ZL)v3ZhJh ze8iHcnoqfd@MD(>~dJV;aLZ?CRvT*?h_Ni z0u;2@FR^qI#evgXWE*pH*f=Q01iA z6m?tk{6QKi!bC-mHht4X$!EfhU$69^3Wxw5q>W$YjpV@y%CJ z!9_;)sfW(G?(L>}%&$mXN!T!bRmHp_u71!19n;J-$d^oc-mH(CXX@~5#Vz=}Ow`ru zpy;sXOQ-5w#VqT)&wX%nCvziN^vCR5F>|8CYf<0*6w-BP_-sc;_CnjmK__0RS zWnPH%wPrYjbC1_SyOz#QK6Hjj{!Es(lBhTvOPnIsRWNsE4LzQVs_7HYaJCV7wT_rAC$@5q zXd!$2*WzmihW(ypu@&h4HEX)+&e|)Wj$Ln&ljfPa*Hk)`kRj(9%f9>EmgX}NY+i6` zaF9~ADc*h59%{rUD`^46efHN5y;sI1`c}+Orm3n<#$TTNGIhyLu3~-TAgl1Cv5=f( zd8xPwaY0oes|=&2;1AE^V3?8`Iy+L^;R2WmCbQ%?0f=!R?#_*0z zogRE>l1$fVY{lnG(jtYNyD#vhgfp}ZjK;psdCFDK^TZT7x44!%g;=8e5>mKLj$VC5 z--{;b$44HokiwZ=+e{{Q> zw83;S*#I>JfKkby= #QeJ-#g*YSY6KjhlPc<5J^L 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

wBWtaT&^$LS=$K(k1eWZ--ls(~36 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 AhX4Qo literal 0 HcmV?d00001 diff --git a/home/docs/help/template-marketplace-img/hover-window-guest.png b/home/docs/help/template-marketplace-img/hover-window-guest.png new file mode 100644 index 0000000000000000000000000000000000000000..2c99b20363b51baf1a528ffeae41e662605cb3b0 GIT binary patch literal 8228 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

FirdFuJ0#;6i{9H}!APP$qpF0w$v~wts;f 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

    E$wdKpoA6@ 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�N3l4}oHqOpRQAy}1 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 literal 0 HcmV?d00001 diff --git a/home/docs/help/template-marketplace-img/search-name.png b/home/docs/help/template-marketplace-img/search-name.png new file mode 100644 index 0000000000000000000000000000000000000000..7467dac8d9572c9696e8126bed75323934d13fab GIT binary patch literal 74388 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

    FirdFuJ0#;6i{9H}!APP$qpF0w$v~wts;f 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 FngF*ehcN&E literal 0 HcmV?d00001 diff --git a/home/docs/help/template-marketplace-img/user-center-asset.png b/home/docs/help/template-marketplace-img/user-center-asset.png new file mode 100644 index 0000000000000000000000000000000000000000..db4d6a1a922fb7dae5d788cf11f8644d167b6706 GIT binary patch literal 88469 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 literal 0 HcmV?d00001 diff --git a/home/docs/help/template-marketplace-img/user-center-star-detail.png b/home/docs/help/template-marketplace-img/user-center-star-detail.png new file mode 100644 index 0000000000000000000000000000000000000000..e7fe46e73e6647b262b27b4e2c5509a60243cb24 GIT binary patch literal 51963 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%0DRcK{GnumzTluBnQeIvo>MldJglb*s+Ib?pP1hqy z)z`z?`fXohjNA=eQaHIWx+?>_sLnA^)!ZLmBF%&?!%fD>1J|C@FYm#n;+z>V+=Pdi z7*)NL)wrrZSWA7w@pGwJw@z!U^`*LjMUI3764yABuDei2)|TI($pL5J)C^to5cd^3 zm99B5n)%t~)3)B+lgZ)AEpqmPdrVy-^%%|)yf()AI(1yws(7k=ZmE@U<_Bll9~64EPN9Otc7 zJ;qvw%dB*L<}l(b7zXt=1%t^tf?BSluid=R*w{!;OqNti7YST#K&)mmY7&)(L+GNC zXx2qJPW+8%r}i92RbeoQ*5|pk&P_~`)X40`Bsk7^xQwjr3Xz8~hHj61jr>&7R_D2x z6t3!n;T_OFi>fLqp+C_npz8b7tSQo_3J>4;4X=0jit%Qx2z)@?W9gBIM{dX!{6lp&OCq2GKVZ!T?@|CvN|=@( z$%Wirebr?I=Es(mmQBvirfV_GWieQ&j7IiR=Vqs4*F<7usW34NM zKFeI7q}D$h}hN)lGy2kEY}zSMzxItn#GAtKK+#U_69%*IT!LCfhrM zBQuptW7g)Kt_}{gYYvv#LVn=61v^GBLJd6J)*w2IzH0IMdNy-!SHbt9es}v%N)Yxk zKYu(jUAp3>`Q#roxwe{OntGG-D5E=*2R$CG;p5|jHdm-96@j<%dY2%Uq*K)Z1}L~5 zqwZ)k%D6;FFfr0AiiaUAdT}c3r#G%&EiL!Cl&C2Fk3G%c$R4b@of` zma_PgBpp0$KC&{#!FoU}c`J4{B7&Ol#XML)sZOgJ7%;0HT6XBd<0q`ZYd-wCFKbuD z_jY&t329w9vlE#Ndq`L7gh_zZTHE*CAN5UHm(%TeKLy>eGUc*zI0O-I2&NGxPp*OW zrmFh7wfwk`*2asILIE^_FWMShPie$ra_9K81gCr57ZOQOEufU1Uzne-_U*&Lqt74n zU4Z)3X_G5J6OktP<33UQ3hP!#WxZB`!~T=Weq;Bnm)`N8ixHW%A_tAG;;Y&L3A(;G z(=Uoi=B|(hx3KV^cos%H<1SG`#d_C;P_c@I0&kXID1F__+ly2iik_*{?`KLDfSXRe zj7_4{(ZU0jncL3Y$=64{Jphtk2jiF-x;KR@=T67hKa!oosTysEVl!duF# z;M)_sR|b3dZj8PQr<2i?7HP~(5TnN&raV%YxXHcFeT`)C#bUx``-&VyP)JB$W$Goc zFJ&vuQ~Hz;CDvPN4w19zjOHO!g2NFGjw^ru@ap3RSFD{;@k9>lRO7`kP%4N0#vhV< zfjw!SFTtaI9fP<{ID2yMv#}t3f;$l4AAtkvQ{xGopVCWz1H#kb4kUgt7gLg zJPp+g1BWhgirsVrFa|I@$(ZkQ+Z(dj?|_}w91Y^rpjEYXfS>Fe`SHWCPsBu6$m(1Z zBc8R*d27R?z>a%RF*tYCV$42gsEDdh9@Uf^yV_VaI=&XC2i^o>ji{xnaaSvBZ1m;k z;Mj-w`%?2=`o1G=O2N0rPKkPfhkA22f+Y;`FGz2gXa4>sZENkwZ_t|X1jMGtpH9Av zdpct=!8qLJ{xn2#-^gJOjt}xbY@*bMU@{2mU)HR@5pI34fV!D-?P}cUVNP9|8=u4_ z56a%6hEsdDKdaiaI>(Qj7#4T5P(J11d&>v2P*zr^E#m)@R^YH%_cN-0SwS~Rse^%p z@d1->_;L9i4uop&CeR*$ST3j{BEd_UqNAfF3M$_%=fY9&XH^T2_Cv&5-i2>XroMuK z{IM2(vkVR$zDj*QYG`CMzQ(_qmtwO!30CBB!Q+#We6$Mb$mF}WU^4u3%lSQO8(Rmj zdN2cT(QC&C0V~6Ed~a0u@qqZP4O;eOigjh`V?N#4x*E@M%CKgIluNrNfTPTU?`CcK z5r*toJaPO#|6?11r-BS(XdczZF-`#`Lt*&WTU0j@yiio%KH2X>^i_*%nGW^gF(IaOMs|sBa z6SCjU^jX%v*H7Wp-{ng_QBi18?mAd*+b=6EL${n8jRdckB7)>#{iPk-576_}vm$R- zj{&T`g+kD1%~*~iR>(vkT=NDVDL)X;-3#k$9~prS@A>|doNesea0gp9_#QUHAi|0tnUPtlp}dM~4xyZ>XamU*@vBMe@U+Ro~tl4_3ewwKrT* z-%=b(q{r+o?h3uDyLOhh4VM3$rg9zxc3Wsv;4uR4Q$K z)j|$CbXKab3OsD1e@ryn(}q|1%OPD9tBrRkM^9$|HNA7@ffXnBc3W zns=?le*Q}bZV{KilM7ohPIj%CH4UmmOLp^}MHp?gy-+e4DK zCaZpNv$0||CI)+1c(*TR=8J@sU+eLP$5-K&MUGWf=;I~+I*b|GNUzn&OOrV3_P#z_ z^0u^NbHgPkkKp1OS|f-Ly%WX3(s*$K(=jz6NzROWJrY%{wcEFbU|gU+1!|Nh9un#n zvltWSV(tFiB=cnVW~eK6xDmGr*1_ta>}B`{Ed|Ui%h>OW?&-%! z`^0kz_uriE>EYci*?CSFRi+c~aXKK^)w{Wt?-Hy3H2E*OKk zaffE|1)Sb;u(pH0R>itDxnX+TgYqcBO{kF$3!iLO7#Q=gV#~8WF1(?)P$vEB=H<_{ z2Rha#_#f@4MuQhuS!7%Kg;|sZcw3{cOZ}d<^7YBwmyUE=pH0kk0UEa)5ObTi>nm*c zya0HM1eT1AWDfoz3H!D%-Do1+Qn2K{z?B)b2>T><9Yl-UL@lkK(aweEMhhZa>Kv+$ zpzCNfUbG@a0UkT|V&K)Sp_!G-sNY+{{MZcGslbA#9Yh#567``w zGngKX$U!tP<-3Uq^~izeER+3k&-6S$znbIX$n)d?o1%uOy+>cxp>E)Y{LOCLz}N2Z zB9Vz$yWg(-)+o)8ll9QmeMnESqu4-dtY#1;RG@0hboxSKz@x$G`R0DLLV_FAqS|Nj z-&U=LHt6Un*_9$LG{i`!*?sDgs|g&{JF!N(q(l?ffV+7=2ojFWor|{jl_tB2hIn-@ z-R5O{l^RvUu~vp<2Tn^~NbXYSANGs7%~ibofkrF-_4%%@4|exDE$i05YKimp@j>cr z{2=Y7EhQALHl&aLTKvsj6MiL(2fGN!!8ql8jGia_HPf=u&OCny@}VvN;^XtOF(9)ec%qF6qlP?K4>mBYvKoNa8xs|KWX zVz#13s(N~5P;piFnW@=X%jMBy`L*}Z0kZ?YiwsA%cqyf!NX#+*!24KQy2y6IflhF8~GqXl)&ADJ{L} zkPW57y`|W9gwT?#I!4e1H@}s`mdq1gELM%hW+vQFOs<1F7rE9}tyMx@T#%}W+vS8^ z)z?Q4thEshj4L1ZiG7KEO3)v4FZ4EA0B^LolG>5C2h|^=0U6X#c~7Ww8RZVpE-`Uo z#tjGFw`|sv3PdqI16zE2AdWOnw@Nhi_iFUcgFdV#`HDD;1bx^%ox#ss;gcg~j4UIL z?p6=bxW3KH%f-CL_TJ*qQ*=;6a{<|nisSgqQ?XBV$fId5=Uy)ZgX4?7pYLmyfY(is z?HkM9+ulW0xpYcqs6yz{%WM7oQ2($6=XUHJ^-$9^;M6OsDyqG`L)i;Y_$a zLWyS!w&CSShs#^*u(GeajkY6`FAviTlM8E~4#|Gqx~-M~UZ`@&mm;xgxK7QHChq8$ z%Dv9b4fCb^Bh1i#S2>ciDZirh3CeXZm!Z-rP+=ehdt5)IEx%AY_?+aal&=UwI7mY) zaa|=kvaoF=uwTS-Zfg*d77gOyR&&kb=V!#m`#^B{`92}j^ z#qkgHV-(=7J;Ahsn@#rA6rPw2B5`@Edi%{pM}8@*p@9MWVdGod#)9L*FW+Y@!KtN= zT|6pZ_R$z0$bqp8|A9chd69$E6g$>cZ?&`II@sm8anM92IA{{PReU$#Clv1qFCQPN zYt@$|T-_{+Jni&hh5i-asl&ct_HT4c3nc60-nJH3&4*L(=e}nmhPQ^lBgs3LwGul) zQaq=LvhKjaVYrFC^3&F)9>b}vf{B46!q$0(@}l?OX5|i^gf9wn7b`C^s;Gj3LRe1L zn^#%C*}(dZ;hX!W_uEn&&-IZ!h_DBixCxondn= z%~II0y1>kS^W33$>0<@KO@2u}cBC ziQCqfk{6?Uj3E}qUe|6k@laF2hFO30TUlElvultLH141v1NADu2+eBM___um9U10oPF~&4Co zkmDXpM!4m-A41Qg6BMPGJ-^xOm48cU3nG%73p)DDusgpunjAYLS%S@+CUkg~;2^q+ zQD2a@KQAH}DH^gw0Pm>!Sf(QOL%TV|W({NE?W^@4+n6&FkrXDy{$xQCB`N4zy?AQp zS2NdtxTqlkT6uk@4_T4v6p{~KE&9tcvwPZy=07PSLcZO$KNNj8 zc(H%dw0F&HtIMZb-Y8F3hK;rzk3^=i(9yKXmAcyG+=lmSL)OAi}ojTd?zC z=eC)IYbDgWHcEe+E!J!VnE=yuK`dW2@7Q(d(w8}c z$Z(xG6#W9YJdLso%Q4^MW(1K|W8`bsIi^-_B0s}0zsU5i%{w@Xs~$~fF`+N2XXQ9* z%Y=4eF)NKI=6rOv$HE{SvD$=KZA)FdWY(frcZB7}6+PBnbr)YO3(0}uf>DT~R4{!~ z7ZyStDhyVWbQt{L{Qy=O++RH7uyO^l?$XAwFP58_LzUDgjS+#VAvg3-4qYvK>Cx2i zFg&wf)wJbVYSJQRkxB9BFz2QCw?*mf4wBA?`X(g8YG;R0^d4B>*Uz!$-(rphuC}i% z(DE$&yCf@KM$W6>2UY1-oe^Y1yE#J=*``tBK~)r*Hmxr__U)^|_~O1&8<-JElU;YY;NwUp6(*DmyKk+( zbvjPI;N(#e+sTv5SSB^Wm%{H`EwA8>Vd&9UryNbqTVG7`Ym|lruR4~NhP;pPN=iA~ z0iwO#7hEtP*ZM5=nRr9t%NL0l0p7BMlOgkM%+GiXziCzICu!z4*U8l;#jZw$mM4jB z!^IO*Xxl3lKu7W_9X_+}BGPB!gOcz^L+8c^VtLnc6>E+az&Nq=nAJD0;w`OQTwrw* zJxjGQO>vUuox3YJFSC+qKKX^ftzlAdN6^PeAtBKy>qbAz5Y0Walhy%)+Dw}Bc(c#- z+SLhZW)q*f2x(xtz`ADnqxiU@x?ZkH;e`jE+_cv%fOeKzs}XIjB_v|qyF{kfeXV1R zXZRTU5vHw~(g1MYmN}3665^g|X*u!_;n&5>LM610+`9Bf>GTUK=1>08*bnBz-{O|I zE2ck+1FF@S*r`$(xPHAJ9jn*1757S+VL}+rR#aqVTJmw68f|Ea+xI#a$=US}U$^U6 z4ILjZ@g2x7Yb0F5(7VpcEhqwBanvZoR%2Wo*#}Bzlz`j|t#1$eN6v-^|HhHF zo0V85(hrEK%tPvdO&OOGcJ`KrQY5UGFRrSq`Y<=-cAl%$xePHvG`#Q!(w`CXgY$$} zs(_q*YpRCEfRZ<<`;|^S+3PUKK0a3V;agrT7vbmnRTY9)<|{My25GEx#EjAUi#U4= zblJCTP>sGDVW_<$MHgtK;EZc;f8X>w0l;RYk z6jl51;lx@jtK;!LJc}gYF9iEIEr+dh*wLM}2mg!!Q!q)dlD z(M}hAeSL0^N}*!k6w|%Bql~8Be73s3mnf|^P^8jyC#_?;jVocZ0bM{ah)k3Ude^tj zP)gOarbcww^yc~*EI~KYG6AD*2F>>aB5~gBhwS3;c+$I2r(UNz@wuWeOcEiaH;H$- z>w91M2>UBa-9PTwMCJ~h8r4m#SsZd&s`O_Urg2kHmfsUcpB7>r)2DPNH>O4WIJ8a_ zo$MUiF09v`feY!sO&-1WI-}O8Wk$=3e8GkQHun4>dHgpcxwhiuc^k>JDitfDOO$rk zZ+&R~02&dgGdUL7Ulz$Y!j{}5p&H(zshH?VwK@14^{&$l=B5~yyJu51y@DArk|!~Y z@p|uoO@6p*_FbR5*XfebB3)wR1d#CRH(9vv9uWi1q3AQY3(S86f#3bdW8aJOmmJc#{5ZjdeRpgc)I$M`Go!f(#P_o_}vV@s_#jE~MJ8{8od_&nW zSsQ~rL9%D77^S8`dr9FQXP+l8A5g{<>T7pvwKexm0poYjG_^0)-!+v@b$x$XvZm>8 zQ^K&zU`pIE3({8KqPRDDOU#X=kI^=vHTR0vPoCODZtDa^%LY;NWPAwH^ekP&2I&n8 z3p+xUntYQiNPX38jMcUV`K`t5++CLKf<(3d>h3*lul=dX6K-!$s_6Sl z&Asc35tjAvtG-cI>bX<-#orj8s{Wejpa=T{K$*hQ{s@JBU)r^Gl4_5=-R42eni7<3 zkSUzl6`rB_LZgY*E|nk`p49*wt7}!gW*t`%u&tJwwCuSShRD!O*HU@U(j1TJ=q+5u z2kZ*lO$wvddlL0;cbDTz5XL`RVZ4k4Ig%2MIaDzT>Sa+icE@%X3Q#>OEx(V-JRNklT-v>E+22Mbg5%aR5BS8myi=3m0=ZO-fq zs#$j+!YabRvt;?PX=run2hCHwo~x5!iua%UW5{zdmNKNU5~)CDfxEVL+3~gvhOqhE zWV=ups5Pk)CvwxH;IL9c6DaYKq-5o@BH`g%wRD>1j~g>}@%nv|GNGgN>R8{mwI5vte85d5>V(p8 z&V$U4$&9mW`b8T>aOJk!yFo=ZYZm^lSMIO`1xm+T*h* z?2<&<-l}ZCdES6w9uXH$p(v78?Yv*K#|I`$VSAYyhrTV@`QGuxCzAeQ2{8tq2}XkS=~w*=b46Z2OC|`8 zyM%V9w8y(`3g$0vp(7L2Tzk9o6S#5__9Mip3clA{A)yM*6)#brp*dLRxiuzH@Lg^O zY@j-~2sk8hPLD60Dfsqmg^x3@Y-fp6=S<|1?Agk}x+1~ExlQC|!#?pXmH?GjoEANj zu}?yVS~~fmZY*hQlI(5Up1LSW*V4W)NQ%~y$D#jn@VxF^o0)6bP{N4Wk21kbI7}C| zXmud`FJAp)I!=jkPgFfmXLQi6R~=+wm59dAd6t3WqWsUIz3kL^L^!ik1FrDVHLQU4 z3R`Z2MO_8w(=}lkWXCYY?adGEwo7sG^Syz?HokN}wxUBHE&s10F#)jS2B$7Svbwi{;;nVdk2KG6)V7+WcRhmdE@0y!u8s*|*n! zI=k)d@;seRrvuN*wobA?24}%&N|6+8Qvj9w z>pNX?{`K#ErKu+nNOfYx$H?RBkEiMB@-NjrQ(o}`LRU{AZqA6R!@#1K&hg&gp<9p^ zKl*hm0XF^fsrfF2CE4}`JBRjILzyixy~clzm)lc~>-D7vx98bNhVGjvA4;(5-{=*G zp!hHEb|fm}N&DR!A6_4A&8{CF*$VO?B$V|9;A2q0vz}>e%fnE?d}s`Xs`}SASK#!f zUacAseQZbU4R8#?=dGZvFH4!|HDKSCOWhp$v$R!JfcL+CDY1L;JMzO^D`H*t=wHT6 z$S7OW-|A(&4j_Gez;tmryL1)sbOC?9KCR}LTc)k5bMkmsObL@}C>x1JwoVoS0v{4M1y{NcsJCS&hDo|wS4<{OXTuYRFbMaE>*m$+xYm|@&OsPKWks#7 zH3iLA(4&Ah!OHkhe&mwj(WCt_@W|B=VA2WEdBC-N^kXqM*A~EHjTpWMuUA_Ilzc(T zrnMf{p{tPEQK=cihDX}2gC)``gLvj9%LIUOHsG6W;Zhq&<09QYH0S9b%AYA4uycvZ z!3(j5{k|eFuN08Irw_?7C~<*R*J@u?fMzNZ)^3M+d9;s>LmvX?Dsi@;u>kj?=m=-$ z5ZjX=Q(iGWVAcv)a@3t#Dc~>BVUKg#N`}OypwTkrjerM4d*<0p!NRSTr-~oLQ*|LB z&UUX2TWtN_v<_rwvgbi4rjw+zC0#40&*TT3(Q!$fdxEPTpBze3bB>_zhtX7@z;m30 z5TZN3&p}(~+GsGf(gI5on}RLt72#Q5kxw&VD-wH4Ai!DZfwakqK;Y$fub+f(Z4cH| zyd}3cSRSu3oZ@TCGf^0^XsonQk7SIC(_aRV@e8@|`~5$ItgekNZrqC2lFz-ZZAyw@ zd{_eROS+V93&|$ixV>Jz#3F_29Lx85hO73);b>|^yYGaAHlIfZB3G@ElnC9U7^(f6 zY$W46*j{3fj}_0v*N3dyj@X*%*ecaN1GcnpPqF*Jz_b;VL7Z;}qHjJ_Lz5(?Bywt< zvsnh7ZeV;a3o0r=sjXbAyywO~0%Wr(^BAg?z$7~dwI=m$V)ck_Jd2`xH7bs`S4aah zUhPcBeRux+@)hF&tN>q9=lpoLf#3-zWF*vyqGNsP z2O=`cGMXY8VhSwSICj*z4L@0{0a_dPCPG$?PZw_auI%C_vY7WNlyb#DQ+>!>j$i-P z-C&8dFE`u=*yhw#Bp;GTeV`lY6N#-?xRa1_AOz^R7o>InIj7J^5yumAqEl|p3 zqYRAR>!q@|R?94S(;0PXAVE!k?hn$*IIO z2{yl1YkH_67q~x=!^GVv!iiW#gokhNhk-`d;1Emu0KxvdGlgAn)@llh_md3Zg{2XU zK=T(tGZ1G!yVldLTL7q{f?#xK$ zwAU+_7mE>$x@c{i<0)F+qYs|h6$)=WgEEZp9enyegVEZgK`^)t+y|g9m1^rx z*Lsvm8hCoeMfEGDC;gzD+30eAab+{3%)v#> z-UHd`c@-8Pm4i;=G)6F{uh^gjJPFcf8JXMYpz}H{GzH<#x`!&*I;;Az(b>BYA>9|* z5Z`v;fOpC8VPWa}x`7Sy*-*Qts8|>|GuM70)|=;bx%SNasKV;f&Rmr@sgdH!?}?WT zQ+(K-~AWLI>xd~O|T_ay_*wtdPNcNTEUrgGI$LWX8f9=!YM56HV8 zYAd@~PbnFA2DW5yKha!67y1nQMYrs^70`F0P2BbV$@|J%qAy7fe|V^JS;xRrW52eI zo_)b#k#&BXcPis0wI{o%%pv1PZjpDIzs4SS zR+-9CF#yah6&FwqKMvW`TJIqm@s&zB;gc@Bh0_M?(m?}ub1+&~MkX44 z>d|q67@2^jM5~28S1)?i7yZ8PyM_xydjrpoP@kDbp&H!-g~Au)y+R0)m6w|WCoWQx zNuMjjCht{ZOjt?OJqq`)7sVs|Z@Yo;pVs^_YIW#*G|A7~`q?Q)YZ{knyhMNWYHf%n+91T2 z(QmAIiW2G!3E1%Lh$tUIp1(B$ z&+bFy^s3ds^IdW1GKRmXN)q$Ut4P~OpGp#~519+HPC+?ODqQxiS}E+3o_s4nk8-Xm1>2qfSM z%uv^m*Y#m}w;(DBQ$5cLa_I7GA!6?Q1AcZGz+jpBp#u}43vWtOQuf(bO{!ave6wi> z5@8j9Z;;VW@5Spk`LhX_r6rOyS-dEi>kCF+GmBo(jw(hlJtYB8)fSu1!&5~{?cReY!`c2772K~`}V8ZTFSY}JnaAgpSemjSL zaA|@_SFfIqf=pnovI0D9A?5yd{q*$ZUQW1jr=U9Hu+^8fdp_3%t zzk+09{azeMTVxA3Bf_b%)nT_I{vjqKE>`bl6QtZYI^XFEg3f)8bMy{z7(j^eDPS&WOP(_ z@R@*&zYg^h$L~(79iDu!LRn;k*DagbJX~*A6z03q&x5o3Z2rOp z2da+8QWh+b0B!EGu%nQIgQ>2FIV^o*SZYgJ^{O2?iCNhrf2T@r=zMbQ+?)o}rLo(+=o=%idsVK%{3BF^0AOGLNeEN^33mrUR?rca@AIX zY$bQ`BzsELv-LuSw1G;I-06bc%S(ex;i<&awmo?O+W9+Vxd z1u6)>{e_mj$yWb_C2H7pTVP2i?WF!Hq2s&3AdKi!D~rK8`@Q#V`6lqEFR#s7a|402 z@{ob1={h|PGZLkkN~~a8?6J<17mAozeyKNA$~LG3%lTQ-2ZpUpx!wZd>}DMDN>g}c zPhJ^DkqzW3%Bd0~iv@Pr_qabk>q(J`la(~-dBHP|WPq1a)3&P)(PYw(6FiMy01RY* z))%47fJfYiad)j=1}rN(f7|qCc46?$1faDaBnio()LmSTb;*IPd*jnk+6F!uHZC!j zu4A)*#aKrYrp*mCm$LhC9?ZM|eBmiJbqGu$lbHMdSY zUs&kDB@lyVVuofTr;H`lzKjo-NKO`MApom%ZEUE?(La4GrFPczs68=BDfjx&cA)dR z{gA6A%5Vu~MYRsFig{@@s`hk)@jj3d{unlT~$rG~i z&mpJ$1|_-I)q_pgL=0DXa?|OqZj!E;Eq1zCweILUjOp|~1I1nszv*1Z$rGm%t6x_# zlmMT3=mcQMwsK#xoR8AL96QSirl*FoV_uMyL(XYS+RmgnV>I^YRwkZA=?8XMQ7eto zi=XAGMpFA& zpRjqpytJlHQUWXLh`em@#g9;Wyx#%Q42l8Uj9W46Bxt~hDr+F3b#&6|U|}D>u0(N% zW1^_C9-3AP8gqM|1-`pkav~S!qIjBk;RjD%_kH<4Fnz;#5w0n$q5T*2-S7w9NN?fB zo|3$ion0@AqOP>MwdESIa3@iQAFqV8R7;S{aIcu_jt(S7OW988DuhGMmD{m_ftwoH z*vNmNod2DW&qffO#zR|%~$2DcZ%cn(aGJQhgnk2-kD-$D|7(%#y@ zlQ2Z-tb@?yxC7*7El|TtH@xeCTPY^3HG!z%BMNwl6bEXu&lBn?Iy0tks)eIwVTqEU zB=I9i;)Tmbw855-Z(~Okhw+NBO<4w>eE0Z}69%=SYL)XmA4-LexX=SBknu;jJjhfP zr5CxTs9;S3)Iq+r8*ga(+ml;+KzB zTQ4Sf4k+Rymso}SOd=U0cCNu!gwAh(l;PEkvMa##u$Epm-odJtgT&G!Wkq+_&7W(E zSy!0S`dmHq`B_vrI@O~=zO^o4r>s}=;o2E>#al^Y8+{D}M6yNh{9BNS6DW%)z_UO7_(@*dO5;hzC)7ioqxCZN|0{zaPiH0)i8s|8x_@ze zs}Jtvy99A^l(g`7>Dfwpk~i!K(hP_=Y|rd@BC0j=sIo^X_%+CfqYY|USspiCz4hkD zZnABtH+d_q|6bq4;flr$B?UPdWd&?<3R~hQ#rrM=`^(Omb(beKsRlNdjp#lh5}uw# zB_=eTjIXS8Qy#SmaS?ho2pCw%z!Py<>$0jQ;B*oa=4jC`=Hu0K({Cs$UNVYgw3w^s zI{rQ22tIQ`+I@75(pC$qR8`ZX*u^gauO*@d|Wo0(XEtG7wboEZJKPux{=wT*SaY5t_3lRv~52th>!+5w*G6R@cr`I35tp0 zWJPn7p(Hz_tkm>zgC69a#Q*WSlr_ap3zx5+RF)F|85={GsJ%yQh+w$CA0Mq8Q{*eX z7FURkJaSHIldp^UcEgmwQ4fI8-z5SL*+f3`Cv5w#{9|j41W(`c`LX1UA)yP|!*A21 z0hE9R{dqH&YfNk6<&;{+OK+(jd|WrhSulgN`PBm;vVL9fj3u0x+hns;$0w5~FoC9a zJrN6WkO;f_EiCG7m@+ze+%PrHJg>s4By^H;G+}u^-wWRSGvw^99*oJA=5sz21@;&h zPApV~EOnI@sF2Q&ji&VFf0c4$*IGUG6oO^5W z-e?hhIw)v-3gw{=L=IiTV(e}-1=cA~385m z2}ZQTLT93K1q*==-r9RQLm1n3ph*WpEa2&8gp);%ezd9DwBy>{cq|QFWj|QQs$(I? zzO;~VF8a<3o9bmpmdR50R(l#oeqtx2$khlqE&wL)pnLh&W9 zdYU+%(Ng{+)e9ft=|k-Z(JI37dHtX4Qqw-Y?s>;)6_qMms-K3FWI|Vwjg&+4y44pJ zcy^H3{+2Kyi_zl6<<}3xy00ReGlydCbQ3QvCGvf{*88URMG8oDoZM+HJp9N40X}9s zjH(F}kAqtZORJm&W9xT__DZLLlp)(TYlVXM2X#7F30x>e8hNSCY5qO$S{nP^K^7j# zA`i>%hk$Q@$t-;;!_|4|?foKiCHtjwt%fqCih3L1+bf4)VDAH!pYP`yqE&Jq5L0I4b`Y&M zu-3ts#fbQB-QthKEorhs%P;ar*kSn^J9>XW9z;U!Vik|}H_!^8mc!;(PcJMkXu>y7 zWnn<%BaH+aha{xYb`{49-+FfEd0mSAbUQ!YCu>LJBe_(&t0BmK)**>3@2hJA`ZZlF zvnLulZK(4)u}twZ1GPD>FLq|ZI}?st4@Gy3k}$nD|HD`XLB zHgJ&s`Fg5fG%Y@QUyIhXY8#BRW%jM-+GbIpi_l0$k;vV{raJW##|*_CQWmyefpL)W zz8eunChB$4QurNAX8@)ZS!5Elt{BEa##=QDJ1jy%<$H2hU4rSj!?X-6<*LKFU>sz; zZx#;&350C!fBFWQPAN=ld+tVzK8%xqj3=~=81<`4$Hs+_>HJ?>zOI7uKFBGQ{PxS? z)BnRs@!z@pc62tmD`b3bM<-=ge)RAcsk_)xv*E9b@`yirm|D3o z7AvQ&-lV6(M z+Z6Jo!XR8{(QSZ9iIzDPWG(nQ`CW1$Zc7anbth57p~Oou1d?sxU?O~tN^FSV)n_Y*RzNZCum2iw zLd%2f$h{uJ0`@PxBdx7`4+r&V%hWU1!`^o!y5gWFE5`U`{bJ zp68Y9vf~{AmDl;HY|61_ygkY`#6Zy{W&Pd(p5^le)=%{@HowjZB=YxY2k#LIM$+|& zCSG04hWz*Lw#YLgP9?BSKmZORitF8!Xd)A`kWP(e#m;4-3H6-`UPK*gVRLcLQRO>N zRh1^=oIl8f=k#|q8Y;)Utn&Ny>{LiSIWvZBqDe}~FfTB`=i>BSos5IK%-ZEvY|tQH zuA-yxp|s4Bkec47v*nLllvf=W^leL`;~Go(Cm%OWc=9a&VngOk6C><%j_nwIr~08Y zP1?p@Pe7~j?NKWX4jizEQRB0dY9wVF`RMmYOLpx$qU>xBh!AJjrXAk%hPEK|$xJ$-1}D{RjFwodot4jA=WG;YIJv%;Mf$)@`~K7%|7Bjp)*4IkZ$~rNiuH z?AOJjxVuhwZ_azQSG{?2>EDd!Q)m7%CY-YP!E9a@$J~QQ5*1#m*raPoojr-TFMYwTl?`7%3a@1oLQ zbQZbKMkSi-Y;&mc<6sS4tG0Gk1zo!maNc->u{*6Lc07)ihL-wt*S^Hr@e+IP^Qs;5 zbZyHe8MGR;a{xpk=asXz`7`Vi)^KRY{XCpr$crg*dmJOC=E{6aXa>M~x;uNsz^c+C zqj8@y-bk{BeI>N@&fRRi@n~4m&O}>{O7BJ!W$#OmW0!~A`r7Lbs6r3TyKe5{0)uV5 zo{!AC_KC*1g{|4&HACUe7vJ?1tE7d6cwDDEeVQ$nscMX9{`(RvVYQ=bn~@>G_5=rA~oQR}*wILnU$M zsNrSTqMB(t8@Ca@WxjUPnsHDKT_szCdby$V1-K^8ow~{a26bXMswXtFDG@VUNK1&e zj@w5H_PQctt?Ka!8%9X$9EkTlQ)O}VomhP60Hz=Y%F@ms`G;LAd0)ZE7*k|VYtyxM z=$N$c4!7LjJ@V-6!LaRx0l&4?zfC&{0y&;Q&{L`OnHw>Z?(Hp|&eom_?i{GKn}0>V zv~(jWZ&Mt<;z;TKnGj8zj#Rm^TbTzy^7oreW8^bJ3rew0DIs<*4pa`6XLk)UJ9r-J z3_NXbwX0|cKa&2{Fz+`lWxT$nz{((VC}8*-W1h%gG|tL`&yDw&Df!e-ho5QAz%@0F^NvN@o_YGRHA7QUj^XItuSt*# zSp^^?51Y5S;@V7I{Z{$|_UznU-KLVF2l?U#o_>3E)dbkEBB^~cU^8os_ebnH&!>ph zu8)wg4LPl}uK+{JbEoSTSG(3tSJW4)ZzHYUZ@M7yqCcSs=aOJAICoT+z+Ss*HvA9x zb0z*|zsB=0WspO!NJ~bGZsvV)a@KE<%0ZW~z9|3P@u!#DyU~{H%NvWl8_nV|C0Pf2 zLMLYL4y-Yg%1iFapPBcme80BK}ZP{*qoNV+BjPXNoxE7?iqoZ#)dkxs<&wSYSH-L5}e(#+7oNi8H zZLPpuw@A~`B1%uBKH-!8+;4hi(g>}Nq*sRY;K+%MGFYpvcB{PtetmlH`u=P#4w4;6q4^P}=``j_#c{|=P-~I_5zs?K_hDW1Lu(g!EqJ6u0r@uLU z`TYf1LTlj2ArLW@`J%ph8UIC9*WR|X?)7GkM%S60PHD5R_N3!P1j#3o=PS!9u=To$ zG5IH;o{&*>;b{zeRiwaceI4c0i=>)@3*l}~B?q*9mbKb#jXnF?k7BWxhUX@&h$yA1 z{ne+B1X~A)#g|Y{7B)U(_>P+pTEoBni-9?l(9FR=2XFSJs(Q1X*UzTK0j zsVKdzVytkvRZ{v!<33rm>%+_pF7u7+x0Rfk^#-0Pp8dka{7T1J*IZ$XsN}haeM~IJ zk2_&XvCtdk?mQ}Z8*h8W0RoxKL-ptXUjN+$4G14h{yiB0)zifH2nWS zT=ehd|EHp22+y?;Pz;|(I}oS=pMU?ye}W#5x)X9~zx?8p^EOlzQcEYG@NQ3{`Tp(O zYxX`U{|)=gFT2&IiBQ>jwP6$akfzx2p2sTNw{J{Zu!3$6D=$y}@rg^zmi4i> zjd{6{XL@wdK;?wVYBTjwnAY3f{7;ZvTA6wF@6VFFj{b7#;>OT%nCa8w)V24`Ubh)* z!DI_=lf3^}&$IJmyHnP$f7tPst_A;x)Bz5i-tQgP1WR!0cSW+PE35qfb$Smkm9egQ zj~*Sp{4X=w4W;P8rvFTfcRM39%2@xh%!ijwqULq~g}`z9A{f~ce4^2DLKT%-R|zhmI-SRi?v<}bWc{ciKgPxLp`y=$;5F}y*V}!thQF^V$8)vkYcATak8NwgyeVtVZtiQ1 z32uCC=-gc@?^MQpqFoqV7*)$DgX0e9`JhkLil?Ma|J54<2K&1Ph1+#zpIcPUwXiTYi%vg9FqX4r zWPB6~Gs-R=`IxkPJnc&CYI=oEZn{xizO@UKQSQly!cd*O8={q+m4n(rytiga!H-A3 zAE-LN82=~ltd|uYglaA)6QzRMBE(339~FA>d4@_hNm3DvmqYlR#L6lEd?VkcI8NJg zeABO(d*b9=SLgNjAW|^1c27vnUKs421S zFS=azI`=$2*SJY7m1l~r9{Qa5hJrikNyr@AkrG?|_#Cx6;QbZX2u8~d_pwj%iS{QV z7*0xs*jCM+!hxAz*NnI+On3$MZ1_``CA)uoQgl$n@u9MYK)6qaj7S9Twa4hm;(K2v z>c1m-GFeV>mx4H%IyT@K;$c(1SMzb_nuSHp;SlbNeC%*Th#D<>_m*23nrV~vDi2C1 z+d4l)&&&Q0koFe}IV(IcB87T~_(sl}H%9G_cR!5^m(D6K-Jf*``zp4;=Nk+ZmDJQ(w3tO zJ)km2|9lT4HYC>3(WvOU&+FUxq@0WTD;aV36||VjrN$`RDFK znXoY!eb@OkO5MnEHT&%oVZUMEllG&?hLzCO_pk$gKgWM{YsPMKl&`A8!_DzAR`(h-27we-m4QbI zOE!b=B?tR)YkazY-x2!KkJ;2%`=d6~JSg^LS#tGf{9}fJXL*aJC9ASq7n!M#9pbCV z3J)rG_YSSY>mNx^7AKFUZi`^pJ5)U>E!h{r>YB73e zR-=}GV79h4LDTYZvf4fW+GO>6=@n~l|2PgN(XE$djY7AP`(n8KzL;Fs-_ya?|byd|ue&j`yFFDhBxuAy@KuC6;X zlSo+%NN_TGn$%ijbtfN}5b-Zg^x0+u!s+AxlRWOfaahCu4kotz2>8-Njvx5bSG-zQ z^gAHQ?%M(x*mGV%rb@Zz0n+;RlZ3(GtYAUP0Zd<0mw=<@uSM zyz;T<%v^wK2SOmg_)-&K4F8;dwMw)bn&kD)SI;{`YlG)Gd5bQucR`sgMR)!ZI#Tkw zHmg#lC)B#ojhoSE^Ty8VBCtzBAOjH<5rYHj+#A zyQne6rG)ZZvWy0@f%!t4MGaJ%PeT@3b~tsJiA{q(DV>!5y3a+eCPwqJiOi0m+-ZGL z-6D$K(k03HF30>pRuysKM~V*n!%IPLAWIj8Ivuok9?thC!zoWg2`TTklbt8}UL{t~ zX36qC3rAAyqcs^1pdG5R406iv>TZaj%%Hx?GnJj3SUCv0bkA`}b5T0C$+y}I+X*=~ zryIE$13Mcd>LEN8I&l-?)7ZRkdwoC1XiJdSi0@mdI-uU;WoEf0 z--^&QBBxGP4{CaLUQWEZWM8?|!;;yu zV{TfV*r@_oCGqy=(^5?N)#sc@XG{sIgGr%J1)qg?NF zb-2YakajtE$2@K>eKFT*;P=&QW)9DUscTPF*!3(Abn z^7%gd9h3&sN~*?fSU+Y5(wBNIqzJ|RtPLMT{TV80WpMgeBGDu}b?yar0tz00SexZQ z_}Yl1<%wpRc<7e%)1S6r_%n&~-JTSur85>bVj&8j5q|NeD*M(+yJx=9#Y4Xd?H6YY zwv(!k4g=7$Q|Vg`8)R^}mx{cG;#a3q2zw<94)FG?J&-2cqkiz92XHB@mm`+%SKD73 zDG+cbh3m!_^>_=33WZXU-`zpIS-mTQdLda!C2rSdJKpsId%lE+gLJ{J*1KaxCTf?u z)RG1^7xU`W?v`!{ZN9iussGcF>Gt%Ndl!qUp6-a#f2B{Ukox}qfQjZ}6+L@CHb&Og zcb@UK>tl#)jI}bIHN4CXs!mfGwb7$g`iH`Groys8`)MANWyAa-4F59c;^4d3&Jk!> zr{>b#L8Do1>isQl_t5xm!L+Qvo#WH?^kh_2R40uY$kC$RbEf#dORKfG!GLy38lklHH^bF?K5?o-aH< zM7R^#taC!oci}&NbX5{1=jP_d$(bstG1C1%uli0{)voSNUS1wgSYBzMz1S;krT_L% zo7Qu=!)Y;5Wtb8hT$p8%&qUYuZ2PhCarT)9YcdUEs`-oKjaEPU<9dm%^zJfG_OpgE zINEqeO0%$q9^_ihWz3v7=X2V}$NL3Az_S4=YMa5F_TP>!#!)kPH{kp? zmb2b{;Vjp|Fh<74!oosxD;`*VSkb!lWp=h4nzEnfbxsRvVW5}SeeIc8zCW3}b!+GR zj5Q+}M%|uftP{dp2%3(VsSzT9E_A~I+_a_cVdy1+XCd86g3d&N!G7+y`7`u(PDaa2 zy}eZL(p$+bAI}Q}A!{(*#GIUL(z{5W9*q2D*kb$2P(fWsj+t!4r<*f-t18md`yw&C z{;Wh>OHDPDpa#vWfm2)r3FzkR>frE$XPU&mvvzPfxtJjEEE_0w2YEQVRtc$BFrF8;1 zE;|sV&d}z4#4MjF8$&D=wZU11L2uIi-{0GXc#aH%Na%2z zfc|y=QfgH-wB(pcfwQM6q2>%Y}eHLLqlHrhnvx5Wo>DhTl7njui7mj3Y!V_X1=miIq zT>kLj0JvvL47nPsjg|F<`zB5=Du;Z0eg<(6*H#JJ22IyiCds8rl{$46^6)C1;~Ge< z--*DBMkX8Z>0z@Rj<`FQLvw`>+&IFHcojf%CffM*-2}yXPw(|=HHI#?@%&~UavXa| zHF};!PjiM=65Kf6!;qUy=iuOA{$hkeo*(o-k6Gr4t`oxxuY0}9P~EjRIeY+)50sRY zB8ue@kiIfZ48M zM*{u(TAd-_n`>i&qJK>l^jXcToM~tUM?+Spuf>i}Of0`Q4e>yZR7VxnYY2F3sD+(h z9M6}?IXegx^!E0KRcwq=1)bnI!Nuw3InYq$*(~K8+zevl&Mb8w0Cs6pnP4l(6;dg8?I`Z=gX_geLW}g{}WkZ&e`M zar0hO_E36RR@SaGYzoE{iygi%Z`PkzZ&~JXneSH64Q^NMCc}_h~0-@LW{RO+^ zejuN)YDh2353L%g6im`d0su_!8=cI|%!(~1fG{(OBh9Cx1*n%=fF|_IykB2*>_W-q^M{UOf#;YH0D{B7sWrO19h=2bH zBoX?5o(^GMGih}C)SRnY711?RYIBLYFLN*g_~2h0e31p~ z#eFesB|+F)U-SiB$WT0EX)+BXLhjUzEKSCaI2j#4ih^HZPddH-?TAWSg6R&Fa9U8y z%2h9d@h?xC4|+yLu2zZ=?`~~nPt+Q*qdG-8U23=an>CRN+lO=`qhy0$om}au_=FYA?v)vywSv$R#9ZHlNxE3>Kbc5kEd{`9u&1V(4 zlEIznTdp*|YPPoZ)D-M(@sx>fv|0@No?QEFGvgov4tOrN5KRc{I=CMt>-(*TUU8Ym zmGihJ1@@zHC-`1yYKzzx7kl~hR&vb`Z-<0eg*EHAEhELeLLtI$6OwnL^qsfNj)ofS zZmJfHw}dttrt#+mn~MyG*@=<64$cs-D|I41=dv?W%ZCbzTaQlFxQO%4-_q z!nU5uHOGMO2Ty|oi*4Z8q{fH7t&zilJRFOEPNq2gF9Z($|bToep3+szL-sd^GzjI2fVD=405BW z6m;Ek%&!s;M}&Go<0~+6>Mkt+;C|}aB|0=0vU0+ddpV@yT&w0jZ9k-Zu5c&augAOH z+t*h@8*83#n<7e1Lz66X;nJ}QF0BY4T#1JM7ynrpm7Nx{2-n4&)0#I-qcu0bgr5B~ zCoa&dgFWGJu#E>?j&UiwK{Q#zz2BmGCVmFTfbKE9Wu91_l`GNozbMew78)%O`ou6) zIXpInH8S#!$O32EVx&w~i{5;oAHskSB}FAACaF4QEokipq@fabCje2n|AG<*yA3^s zigG{U(*h^Un1sS8qz9O>dJn4LQg^9)?KYT_qA1cz25y46;^Sv!McaZ+o~AwvzX1LI zl}S7gq^2JlOV@r;M+XOoE$EP-UR&h$mW$32fGv`}T7E;41b~|a(3*mhmc}ALC}C&X zOa!!Fxn9|(97Vqu&RASroEvW^78eiIhY{oL^w~(qr=S4{v3wxv9?Fl&xm9a`)0-%2 zh5UoqZe`)P-Nt)m*TCSf+`bqCvj0L~xI%nGif?b{r%!4h-oJa;s8qo`PpVv#7Ru*V z__C^5)l0w>U4W3so((FUeR=*f?U+1DV%#2uLODUF6=*G4uue4nEFW$K{eo^CjF8?@ z4ef|D{$n6bx6g;LSS){WAdF!UDSl?rqQh@-G#dk$_GIQ!G3~Wzl!Rx7q@-ld$19wq zr+?stLxe&aNu>4i_zArYiwy!3fMx#Z#1WtW^?KA*q*lkk}LeDz&!5{p- zM5RONaH`j(v+y#rqrjgijSk_l1bo)8GJhn7|J2%}HNA{T^ksZ_$W5TRlB!%gK58iU za4DyxPFYyAH#eWKt@nQfz~}M86VELAWob4kKrrD zU2ScrHOo(V(qBphAh+$ndH^GXm(uq%G^__i*8jW2Du9HUIXMcXu>QhO8zU^z>RCwW z@K+B33aUnVCMSg_I&~fd^yoB@3r)TNO;^Wk#3v;sLF=u-i;-X8c8KFwssACptfFE` z7`^ZspII2i#cu}rLPCfFU78$?kdJ8n3~5hJ7T$%hv& zT!s5ih}|BI2e>7nCew567|fQbS<+$I?;fP|eT|=IjwgpReyRvBgzoOWy}i6+E8XF* znp%A&fCsJ@6b0fSv*5vh4`V3B4ne4eVR*5f`p=F5k%s=!@qaVGrg-{7}|qQaTlo%p|f03b#--Ko=Z*G zI&Q+X7sz22p`X5D1ov zzP`SuX?j&H=!t;k#W`*P*HX5^XF_W@*|U(iRu}>0!Sa>HYDk-IN4r6a7)iN@=Dm-T zBSI`4`tzAlq;u>EW{!{X7lN<5(>9OK}H8%3Bk6Al*Ui>(GvK; zfB+Y8z(~$HT6@wDQr(!q31~>qnUl83^oP_RU26k?Z9QyyMK421xTXgbazH5$7W0@Wo(yawcf%Z7+He|M>eFr3c`Y z!JcSoY4uP2G+8y@%e>2c#hlXk)J}vRVLDsT5G!&MAbG-tlKpE#M1T@->6#Yf^FS15 zj>rIqnEC9P1E)YHU?d&7j!3UhMAm5X>&hCDVTHbg0ssE<-*otL0`dQg4s8jn7YmcY z^ArK6KMQ<-yVL%(xn)G6G!A?bUwvEuEKSoQ`nl;I0goT1q4NqG9Eu2+$=NSzbvH)x z3VM7AfjMq(zCzvE+1a4L>6Sia-RX05QK%L8l& z{2%F{Iy}`^1IbTkXJ_d0_{==Vy%fWtr9*%~lY@kQbj`B1l$O^Xmx*ym9rr*o7Iv&s z{TUCd0_W@c?lGqhQ<6tVM>}E1VsYvk5>qlW3620I{)m>fN_NV^%^<47Lx~s}-2ktw zQ)SG;#;_}eFdzc(OH4VsfzshirqCZF8+td+g`;^F`~!X7FpD~`bsAn;x*y)~{Notp z{>R3~lt{c8p>G{h&l0TYRZi;7=VRtB#Po?>G0+V(Hk%yl~}UU4*m$@%61C|Es-g4NEdj!&IBq zwX9uDHEMa7veGg&OGOt4Dl?m$(P}IwkEIo62U5yIAlO*qXi8S*`IKetYMGgbb`YBN zR2pDb7Lniyi82pR2#K)I2Q=I6kNv%SUF)y!x{&Yt-uHXH_kHgBez>2IGH58lDc_pW z;Tj5g1}wOq=Z5XUNEx6zj0f0=={!O)|MlzO!v4yz=_u-}c1!YF5zQ^_r{J^0Pkph+ zz;1QFEN0!|?rX9dvkSacgdfFL!W5Rw1A8(VHFVnabbtAegOV};=I;d zEUyCBsW41=O-)VUtwZczkkn@}`VL%mfS+{i3KtoM^0Gd?=RnGR0*&UhMxbiTzy`Yr zIDmG`i7cp!kOR(B4T%RlnwpvrBlEb2IfJH$Tv!mM#+DwrVV=?3LPA0i`wa`p8JXQ8 zo&JKmqNg(5OIA3WJk67rL0yLYWv?9&D5t5iTuzBx7qWkk08{o?jX8;Xj$l|7LH8|k*2(eel+dl*yK+&?JF%)_0z2!xEJWd z*6i6ngtbBSRWCQdYlLjDQGWU-R|wg4>H>?`7aD)oevvak z_KJ9H&2}`(b&A*u`YCm#SES~YeG$^i==T^S`Nm7ngP1=yknU*dc6lxbW(y;tki>76 zm>`1W9HYQL>-e#TJ%-BzO3HJjsX7;~`rhqbRc(i7a>_7p5iYK-LU`b+vjfbz&`ZuY zZ~aO^Eznmn&dy`dEfRT~7zAKFAcj>3(X~J1T=&$a8wNZKqq3=(WwH`;7JPU2AZ=_D zw)=u^`X0fSCxu`=ZsCH!VX)JHdp#3FdO7p$+816tjHx$6Le< zbNBV+MCtXMQDGC7eg1i60IWAn=K1u!8J&C85BKrrQ-BKFb352QcH|`}{4N+w4*d%h z`i7=kqcg1y_aPWRJ-Q>!>^HCNxZ{yRW&%PJ03ib`6+65&?F>VP?eAh9cyzIrha*3^ z>IERE(`rR-A}=%y5WR{ER;64VMx^>ud-Y@;{N~7)&(bc1Pol@nEOQ^BflV*_L${CE zZeAJEdK>g||Q{Q!#X52IYzgVwq}W zq-EDK5FV$-B~|`+UqmBaOG_1c(3|mADusQ6fXI=sDva`LZ@h%sfoi{eXDQNZ7_g~P zkpSx-dAqur2J?BEOa|Vx5vaA1AqZT~*0?cYZ&%la_ZJd*CSA52F>^V|DSc^sC)BH@<3Ouw6ozl-+Oq`vU8&usq#%iv`k>PY~lbD=O`$pt?Ct{XqKk1`(W}X`23_ zN0;EPx&``F`hObr|d&yUAZC<0=5wrTLRno)2D#zN<{-3s&okLMQgIt9a&0< z$oEUvI_KP&W#gey4yv-zi}Rn#x?Xp8U*s`ZLl=D%V{CCsaF5#|LlNSYN|5I=M=)0qcrwhUXDPEhuuuCM56%GZi0cAHWO!$+Kt9Q$NiI z2U$=?GgCW}vD&QAy=cf`lI{Nw|0m|bv?WW(YPM?0KyA#!=O9X5x=ypc+E5=*VCi;u zSVT3OgGwq_-~R)uFD_KK|BPo@dw(81r2y(w4eZf@XJXSQ9u<9_ld0^DV*%Z}qcP zqH@&u(qZ08@Z;BSJa4ck?~Db_r^XA^E%@oXff-nI`;BOcIYqX2AHZH@M5R3j){w6* ze=Enk4Re(bSgdm-+9_UP;&cg}#uo%xnqQ&F{3je^(+dQ!`4JsM^NEjRAI91lKO$a~ zSC5=Z;Drx*Tb;O!C7`Gqkh3P?%FIkVDy;U%u|wJ^KQ@Ie2?(Oru*b5daLi-HliAi} z?BKFylZr?&rkNk0xLU2PXlP8}j;3{Dy78Z?P2`E0STDP&)Pb|8@zoPB9jKVk!2a|^ zGgdNEDLrFNJXY;M>1%G_zv#r{%4oAF{*5FD(V9t%MBkmPpNDp6qudfDg%;$JIp#CQ zrSdP%5>)RI)}-~Z>a{lsW7xZ8*(}M<9-}v_tHOOWN3W`(WP+6TRUDVkO}3ngDlwut zfR~Y9q*1q#&_nyt!dt;MiJNLP61wM@WIbl5k)>+iM&@;5DpnHi<#VYPrTjsLTue_Z ze0>nZ6JsS3w)Pjz;uFXFisaD*e=(^ptsG7uY2YMln)joW_f)#z(S=^hl8=`pIA(&T zovjf&;-&0anrwK^qB~Xz+U?Tsy!*KceRx}=B+)wL#%>nU;D=&J?S{U?8kz zmIVLTlZQmwQ&P6L+)q12L!VAA@_V>O!y#&7yIgE%^kLdcd?2GUq*V7xj@?!$+A?fb zmF(QDX=qY$NUX-82L*2_L)EC%{XekWG1gP^vEGbsl)9x*OAG-lkn?UDEPTkgh&kI}$(us7Ms z7w9`%CY|}$VgB`iHr)mpKB~07^@_(m*jh_tK-h{$U>Qtp(Bns*SP;(+@`}HmfKqw* zdsd%&iQdEK@8tvF@X*a2s?L6RXqh>V0zKdBx_f#Qp!KwobpO4hIee$(=FnU_P^pBF zAPAv+Fn)>dqp00$JCdcNqe4iTScy|>V0Q#O383&Ok;owEZlH8k>rIc1Wbzbz6QqNu z&!6vxFCh3?F$_A-E6`RI%gF`r7x8rM={IsxL+*>9lJo>n{=i%VGGs!ZumnFyaW&d> XX3>h?{Y!Qs7yr)7cgyX~`+oihrjJ#s literal 0 HcmV?d00001 diff --git a/home/docs/help/template-marketplace-img/user-center-star.png b/home/docs/help/template-marketplace-img/user-center-star.png new file mode 100644 index 0000000000000000000000000000000000000000..91f1ae99dd578468dbc3758bc98696e08cd00a4e GIT binary patch literal 107015 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ⅆ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 z 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 M4(`s{dG_l61NqDIB>(^b literal 0 HcmV?d00001 diff --git a/home/docs/help/template-marketplace-img/user-center-upload.png b/home/docs/help/template-marketplace-img/user-center-upload.png new file mode 100644 index 0000000000000000000000000000000000000000..e8fca988dd248c92c596fe799bfb9d1f022e47a6 GIT binary patch literal 182357 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%0A4A}k+A-c!2)r&-O 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 Hertzbeat official template marketplace: users can freely upload, download, view, search and share monitoring template files. + +## Basic Functions + +### Search + +💡 Guest availability + +> Display template name, brief description, favorites, downloads, views and other information + +1. **No filter: displayed in order of upload** + + ![search.png](template-marketplace-img/search.png) + +2. **Filtering by category: currently divided into six categories** + + > **📋Todo:** develop tag function, subdivided within the category, such as database monitoring template can be divided into MySQL, Oracle, etc. + + ![search-category.png](template-marketplace-img/search-category.png) + +3. **Fuzzy search by Title** + + ![search-name.png](template-marketplace-img/search-name.png) + +4. **Hover window function: download the latest version, view details, favorite/un-favorite** + + > Show if the user has favorites after logging in + + ![img.png](template-marketplace-img/hover-window-guest.png)![img_1.png](template-marketplace-img/hover-window-user.png) + +5. **Sort: Eight Sorting Methods** + + > **📋Todo:** Waiting for the actual installation + +### Template Detail + +💡 Guest availability + + > Display basic information about the template, such as name, author, update time, version information, etc. + +1. **Info: Summary information, detailed information and other information** + + > **📋Todo:** Upgrade to MarkDown format + + ![img.png](template-marketplace-img/detail-info.png) + +2. **Version: Historical version download, sharing and basic information display** + + > **📋Todo:** Set up a view function for each historical version to display information such as the version description. + + ![img.png](template-marketplace-img/detail-version.png) + +3. **FAQ** + + > **📋Todo:** Discussion or issue Q&A section + + ![img.png](template-marketplace-img/detail-faq.png) + +4. **Download** + + > The latest version can be downloaded directly from the list hover window. + > The latest version can also be downloaded directly from the template detail page. + > The historical version can be downloaded from the version page. + + ![img.png](template-marketplace-img/download.png) + +5. **Share** + + > Template details page to share the latest version. + > Version page to share historical versions. + > Sharing will automatically copy the sharing URL to the clipboard, and the person being shared can download the file via that URL + > + > **📋Todo:** Shared template detail page is accessed through the URL of the shared template, and the shared person is free to choose whether to download or not. + + ![img.png](template-marketplace-img/share.png) + +### User Center + +💡 User availability + + > Provide asset management, collection management and upload function +> + > **📋Todo:** Overview page, notification page, user settings page + +1. **Asset: Manage all templates uploaded by user themselves** + + > Provides the ability to download the latest version and view details + > + > **📋Todo:** Function to update template information + + ![img_1.png](template-marketplace-img/user-center-asset.png) + + ![img.png](template-marketplace-img/asset-detail.png) + +2. **Version Upgrade** + + > The user defines the new version number under this template family, updates the version information, and uploads the latest version of the file + + ![img.png](template-marketplace-img/asset-upgrade.png) + +3. **Star** + + ![img.png](template-marketplace-img/user-center-star.png) + + ![img.png](template-marketplace-img/user-center-star-detail.png) + +4. **Upload** + + > Create a new template series and upload the first version of the file + > + > Fill in the template name, select the template category, fill in the description information and version information, and upload files + + ![img.png](template-marketplace-img/user-center-upload.png) + +### Sign Up & Login + +💡 Guest availability + +1. **Sign up** + + > Usernames can be duplicated, but email addresses are unique + > + > **📋Todo:** Captcha function, email verification function + + ![img.png](template-marketplace-img/sign-up.png) + +2. **Login** + + > **📋Todo:** Captcha function and forgot password function + + ![img.png](template-marketplace-img/email-login.png) + +## Development Steps + + > Download `template-marketplace/hertzbeat-template-hub` and `template-marketplace/hertzbeat-template-hub-web-app` projects respectively + + The front-end project in accordance with README.md directly start + + The back-end project steps: + + 1. Run the `sql` script in the `template-marketplace/hertzbeat-template-hub/sql` to create database tables + 2. Install MinIO + 3. Config `MySQL` and `MinIO` in the `application.yml` + 4. Start the back-end project + +Other issues can be fed back through the communication group ISSUE! diff --git a/home/sidebars.json b/home/sidebars.json index 4b32c85d93b..25c730e05f4 100755 --- a/home/sidebars.json +++ b/home/sidebars.json @@ -384,6 +384,13 @@ "help/issue" ] }, + { + "type": "category", + "label": "Template Marketplace", + "items": [ + "help/template_marketplace" + ] + }, { "type": "category", "label": "Others", diff --git a/template-marketplace/hertzbeat-template-hub-web-app/.editorconfig b/template-marketplace/hertzbeat-template-hub-web-app/.editorconfig new file mode 100644 index 00000000000..59d9a3a3e73 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/template-marketplace/hertzbeat-template-hub-web-app/.gitignore b/template-marketplace/hertzbeat-template-hub-web-app/.gitignore new file mode 100644 index 00000000000..cc7b141350f --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/.gitignore @@ -0,0 +1,42 @@ +# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/template-marketplace/hertzbeat-template-hub-web-app/.prettierrc.js b/template-marketplace/hertzbeat-template-hub-web-app/.prettierrc.js new file mode 100644 index 00000000000..4578bf48815 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/.prettierrc.js @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +module.exports = { + singleQuote: true, + useTabs: false, + printWidth: 140, + tabWidth: 2, + semi: true, + htmlWhitespaceSensitivity: 'strict', + arrowParens: 'avoid', + bracketSpacing: true, + proseWrap: 'preserve', + trailingComma: 'none', + endOfLine: 'lf' +}; diff --git a/template-marketplace/hertzbeat-template-hub-web-app/README.md b/template-marketplace/hertzbeat-template-hub-web-app/README.md new file mode 100644 index 00000000000..9dbef66047d --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/README.md @@ -0,0 +1,27 @@ +# HertzbeatTemplateHubWebApp + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.5. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page. diff --git a/template-marketplace/hertzbeat-template-hub-web-app/angular.json b/template-marketplace/hertzbeat-template-hub-web-app/angular.json new file mode 100644 index 00000000000..11b910d9542 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/angular.json @@ -0,0 +1,186 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "hertzbeat-template-hub-web-app": { + "projectType": "application", + "root": "", + "sourceRoot": "src", + "prefix": "app", + "schematics": { + "@schematics/angular:component": { + "style": "css" + }, + "@schematics/angular:application": { + "strict": true + } + }, + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "preserveSymlinks": true, + "outputPath": "dist", + "index": "src/index.html", + "main": "src/main.ts", + "tsConfig": "tsconfig.app.json", + "polyfills": [ + "zone.js" + ], + "assets": [ + "src/assets", + "src/favicon.ico", + { + "glob": "**/*", + "input": "./node_modules/@ant-design/icons-angular/src/inline-svg/", + "output": "/assets/" + }, + { + "glob": "**/*", + "input": "node_modules/monaco-editor/min/vs", + "output": "/assets/vs/" + } + ], + "styles": [ + "src/styles.css", + "node_modules/ng-zorro-antd/ng-zorro-antd.min.css", + "node_modules/slick-carousel/slick/slick.scss", + "node_modules/slick-carousel/slick/slick-theme.scss" + ], + "scripts": [ + "node_modules/jquery/dist/jquery.min.js", + "node_modules/slick-carousel/slick/slick.min.js" + ], + "allowedCommonJsDependencies": [ + "ajv", + "ajv-formats", + "mockjs", + "date-fns", + "file-saver", + "extend" + ], + "stylePreprocessorOptions": { + "includePaths": [ + "node_modules/" + ] + } + }, + "configurations": { + "production": { + "extractLicenses": false, + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputHashing": "all", + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "6mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kb", + "maximumError": "10kb" + } + ] + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "proxyConfig": "proxy.conf.json", + "buildTarget": "hertzbeat-template-hub-web-app:build" + }, + "configurations": { + "production": { + "buildTarget": "hertzbeat-template-hub-web-app:build:production" + }, + "development": { + "buildTarget": "hertzbeat-template-hub-web-app:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "hertzbeat-template-hub-web-app:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "tsConfig": "tsconfig.spec.json", + "assets": [ + "src/assets", + { + "glob": "**/*", + "input": "public" + } + ], + "styles": [ + "src/styles.css" + ], + "scripts": [] + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "src/**/*.ts", + "src/**/*.html" + ] + } + }, + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "e2e/protractor.conf.js", + "devServerTarget": "hertzbeat-template-hub-web-app:serve" + }, + "configurations": { + "production": { + "devServerTarget": "hertzbeat-template-hub-web-app:serve:production" + } + } + } + } + } + }, + "cli": { + "packageManager": "yarn", + "schematicCollections": [ + "@schematics/angular", + "hertzbeat-template-hub-web-app" + ], + "analytics": false + }, + "schematics": { + "@angular-eslint/schematics:application": { + "setParserOptionsProject": true + }, + "@angular-eslint/schematics:library": { + "setParserOptionsProject": true + } + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/ng-alain.json b/template-marketplace/hertzbeat-template-hub-web-app/ng-alain.json new file mode 100644 index 00000000000..ff78a68b9ac --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/ng-alain.json @@ -0,0 +1,13 @@ +{ + "$schema": "./node_modules/ng-alain/schema.json", + "theme": { + "list": [ + { + "theme": "dark" + }, + { + "theme": "compact" + } + ] + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/package.json b/template-marketplace/hertzbeat-template-hub-web-app/package.json new file mode 100644 index 00000000000..e16b6bb5386 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/package.json @@ -0,0 +1,66 @@ +{ + "name": "hertzbeat-template-hub-web-app", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test" + }, + "private": true, + "dependencies": { + "@angular/animations": "^18.2.5", + "@angular/common": "^18.2.0", + "@angular/compiler": "^18.2.0", + "@angular/core": "^18.2.5", + "@angular/forms": "^18.2.0", + "@angular/platform-browser": "^18.2.0", + "@angular/platform-browser-dynamic": "^18.2.0", + "@angular/router": "^18.2.0", + "@delon/abc": "^18.1.0", + "@delon/cache": "^18.1.0", + "@delon/form": "^18.1.0", + "@delon/theme": "^18.1.0", + "@delon/util": "^18.1.0", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "angular-tag-cloud-module": "^17.0.1", + "echarts": "^5.5.1", + "file-saver": "^2.0.5", + "jquery": "^3.7.1", + "ng-zorro-antd": "^18.1.1", + "ngx-color-picker": "^17.0.0", + "ngx-echarts": "^18.0.0", + "rxjs": "~7.8.0", + "screenfull": "^6.0.2", + "slick-carousel": "^1.8.1", + "tslib": "^2.7.0", + "zone.js": "~0.14.10" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^18.2.5", + "@angular/cli": "^18.2.5", + "@angular/compiler-cli": "^18.2.0", + "@types/file-saver": "^2.0.7", + "@types/jasmine": "~5.1.0", + "@types/node": "^22.7.7", + "jasmine-core": "~5.2.0", + "jasmine-spec-reporter": "^7.0.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "ng-alain": "^18.1.0", + "node-fetch": "^3.3.2", + "prettier": "^3.3.3", + "purgecss": "^6.0.0", + "ts-node": "^10.9.2", + "typescript": "~5.5.2" + }, + "description": "This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.5.", + "main": "index.js", + "author": "", + "license": "ISC" +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/proxy.conf.json b/template-marketplace/hertzbeat-template-hub-web-app/proxy.conf.json new file mode 100644 index 00000000000..573f488e5c3 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/proxy.conf.json @@ -0,0 +1,8 @@ +{ + "/api/*": { + "target": "http://localhost:8080/api", + "secure": false, + "changeOrigin": true, + "logLevel": "debug" + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/public/favicon.ico b/template-marketplace/hertzbeat-template-hub-web-app/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7a6cba72e7a3fe1af0d358301f9e3463d42c3a99 GIT binary patch literal 2540 zcmVsTOch!w64JEkJ4RwVZ!Hp{s z0vHk?0mKCcNQ;XSCD<_(rGzHa!L$l9?|Q%2zS>UPnfLBJw{zRRUjm&@-#}-+cg{WE zx%b^Ch=D`-{_K4ze}|ORAxP$>6rDsetA3QF6^AIO_g)|&285u?Ud21}N};Pjh6vIm z5XbX-q?Fz2+ipsz#enccpNVL(g_@QzDWDBm$uSNdDrE zdPmk23aPH*R}N5;>THtr1RcU>UF)C)Q{U8h)JqAAMy+vcUZD_*P?-`Ios^e)@0Dv^ z-&8+8N2sa70b^2@AEMk_E!3R5 zKX|TOs?hE8cWC(FD2<#fQo_7s(_R@}pk90vM3k*)%Dvq}n?8Ar(wWqP#|(crN`s$W zS5a1>ggHz{RWL^RV!ftqXR8{|Qj{=0I3wcA=UzE1hx2qp6v%g42RsC|$E#c6@wVwOa3eaaFRcLYd@a z*DF5V)Hlv#dRc`s$;abtF5V8hLUEb+G%>Q6W*5<$X>Xc*t%^qO{#rH7>-5H`(%?98 zz$?@um|e7R&>g7$zaaE)eSZe)Fl>-EsAf5ECiO)zyO;&u^3{fUPY68M@kO4VKh|z# z0#f%RwGgjc$2fUQQ8J&+NusgMscfrX091N$E~j zeKt%XM8cFo+%Y1*^I_t`RPuJ-*E>39gVW#0zY6wWzLvZX#3 zmm}lCgD7k3a16Idz)2tF;xcAL6}lR=+DV9{=jtq|)PZ}AB1`IXx#Gj`hLx?jvhn80 zVlcpC?7;J_FK2@#$Tr}f2xSqf(F;GKfGZpEXR+X3p3Rc_bbDdT8BVhcScF==v5699 zGtRtNhbN+vOFHK;;i6Ewy|Cp>x#Zv&WwSI#X8{$|Qrm~Z$*RwW*@ZCZDhwaIJuMRa z5Y|I9FM$Ryw~ul*qAq=KjfVD*%!(we-TP_#Alq6wTiCcD&sZoMW*3pP(1J<`hwEcq z#>T2&LbhfxST+UU=Bj5d38(nmGo znq96ngqJ@q%n~UC1&(f!V{7*rBcU3#OACj|9^5lbBPSN#co{A zqX0qSmE!z=E^chnkkmIek9Ua+d=5JAwIU0V6jvnB*`NwnC!(>7 zHRjk9AL$CBpu2$dIHX!bI%tni7Ask8p@Zk*Zi8ub#BiysqucqgWp;tKP$rwN-??I5OxUDJ({|X7D6LzfAu4n`%&sr@(k&)R z7EeGWl+eC+-SGGEw_L*no$IO3HM6TIctXel(gbapI8gN87CfKm4>ACz zGfFB8XH%ELZ5?#6_1>hQ%bw>8?T7*p;N12r!SumGT>?bixnL=>+eHL0*~-oqD(wxV z?~-?T6;<|=AxLTXgDrAaPZ>t!?2(gW&ikgB=uY$7ERej4cP5QnhaPLYct(BSO$?x| zbMwT~y|=DzL13{oAHaR%!@Gu_rGx<8wGy_>uJA-3z6L^-{q$ba^i#_XU4J-oYK&}v zv=@BEUr2u{s`@A);Odvrw&e*ys<*N4x)9<3(jFd9w~&&k`X7AgQD=lv>BgNsj*91d zyQd$A50a>w4Hm*+fo83VNeF7o8%im6htUK?^#Q5^>?h_sT`y%Y?}lrKb8ogxdo1+y z&&rI?bbu9?vU=1geMeeY^4m8c>D98}p4x)kG31BuRyA6jiG0tCi}i zi6s=6D&Kq6!*?kmE`dO0O7BI3A-iO#TC)*FRuhd_-OV0000 + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/app.component.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/app.component.ts new file mode 100644 index 00000000000..4cb6470145a --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/app.component.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {Component, OnInit} from '@angular/core'; +import {RouterOutlet} from "@angular/router"; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + standalone: true, + imports: [ + RouterOutlet + ] +}) + +export class AppComponent implements OnInit { + title = 'hertzbeat-template-hub-web-app'; + + constructor() { + } + + ngOnInit() { + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/app.config.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/app.config.ts new file mode 100644 index 00000000000..2a11a485008 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/app.config.ts @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {ApplicationConfig, importProvidersFrom, provideZoneChangeDetection} from '@angular/core'; +import {provideRouter} from '@angular/router'; + +import {routes} from './routes/routes-routing.module'; +import {HTTP_INTERCEPTORS, HttpClientModule} from "@angular/common/http"; +import {DefaultInterceptor} from "@core"; +import {provideAnimations} from "@angular/platform-browser/animations"; +import {TemplateService} from "./service/template.service"; +import {LocalStorageService} from "./service/local-storage.service"; +import {DataService} from "./service/data.service"; + +export const appConfig: ApplicationConfig = { + providers: [ + provideZoneChangeDetection({eventCoalescing: true}), + provideRouter(routes), + provideAnimations(), + importProvidersFrom(HttpClientModule), + { + provide: HTTP_INTERCEPTORS, + useClass: DefaultInterceptor, + multi: true, + }, + TemplateService, + LocalStorageService, + DataService + ] +}; diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/app.module.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/app.module.ts new file mode 100644 index 00000000000..319ad9fbb59 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/app.module.ts @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {NgModule} from '@angular/core'; +import {FormsModule, ReactiveFormsModule} from '@angular/forms'; +import {BrowserModule} from '@angular/platform-browser'; +import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; +import {NzMessageModule} from 'ng-zorro-antd/message'; +import {NzNotificationModule} from 'ng-zorro-antd/notification'; +import {AppComponent} from "./app.component"; +import {RouterOutlet} from "@angular/router"; +import {NgxEchartsModule} from "ngx-echarts"; +import {GlobalConfigModule} from "./global-config.module"; +import {CoreModule} from "./core/core.module"; +import {NzIconModule} from "ng-zorro-antd/icon"; + +// const INTERCEPTOR_PROVIDES = [{ provide: HTTP_INTERCEPTORS, useClass: DefaultInterceptor, multi: true }]; + +@NgModule({ + declarations: [], + imports: [ + BrowserModule, + BrowserAnimationsModule, + FormsModule, + NzMessageModule, + NzNotificationModule, + RouterOutlet, + AppComponent, + ReactiveFormsModule, + CoreModule, + NzIconModule, + GlobalConfigModule.forRoot(), + NgxEchartsModule.forRoot({ + echarts: () => import((`echarts`)) + }), + ], +}) +export class AppModule { +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/core.module.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/core.module.ts new file mode 100644 index 00000000000..70e9da75d8e --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/core.module.ts @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import { NgModule, Optional, SkipSelf } from '@angular/core'; + +import { throwIfAlreadyLoaded } from './module-import-guard'; + +@NgModule({ + providers: [] +}) +export class CoreModule { + constructor(@Optional() @SkipSelf() parentModule: CoreModule) { + throwIfAlreadyLoaded(parentModule, 'CoreModule'); + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/guard/detect-auth-guard.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/guard/detect-auth-guard.ts new file mode 100644 index 00000000000..0c2c024d1e4 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/guard/detect-auth-guard.ts @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {Injectable} from '@angular/core'; +import {ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree} from '@angular/router'; +import {NzNotificationService} from 'ng-zorro-antd/notification'; +import {Observable} from 'rxjs'; + +import {LocalStorageService} from '../../service/local-storage.service'; + +@Injectable({ + providedIn: 'root' +}) +export class DetectAuthGuard implements CanActivate { + constructor( + private localStorageSvc: LocalStorageService, + private notifySvc: NzNotificationService, + private router: Router + ) {} + + canActivate( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): Observable | Promise | boolean | UrlTree { + let activate = this.localStorageSvc.hasAuthorizationToken(); + if (!activate) { + setTimeout(() => { + this.notifySvc.warning('登录', ''); + this.router.navigateByUrl('/passport/login'); + }); + } + return activate; + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/index.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/index.ts new file mode 100644 index 00000000000..17ef8d5c6cf --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/index.ts @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +export * from './module-import-guard'; +export * from './interceptor/default.interceptor'; diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/interceptor/default.interceptor.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/interceptor/default.interceptor.ts new file mode 100644 index 00000000000..7e2f45b47d7 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/interceptor/default.interceptor.ts @@ -0,0 +1,223 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import { + HttpErrorResponse, + HttpEvent, + HttpHandler, + HttpHeaders, + HttpInterceptor, + HttpRequest, + HttpResponse, + HttpResponseBase +} from '@angular/common/http'; +import { Injectable, Injector } from '@angular/core'; +import { Router } from '@angular/router'; +import { ALAIN_I18N_TOKEN, _HttpClient } from '@delon/theme'; +import { environment } from '@env/environment'; +import { NzNotificationService } from 'ng-zorro-antd/notification'; +import { BehaviorSubject, Observable, of, throwError } from 'rxjs'; +import { catchError, filter, mergeMap, switchMap, take } from 'rxjs/operators'; + +import {Message} from "../../pojo/Message"; +import {AuthService} from '../../service/auth.service'; +import {LocalStorageService} from '../../service/local-storage.service'; + +const CODE_MESSAGE: { [key: number]: string } = { + 400: 'Request Illegal Content, No Response.', + 401: 'Auth Error.', + 403: 'No Permission For This Request.', + 404: 'Not Found.', + 406: 'Request Illegal Content.', + 409: 'Request Conflict.', + 410: 'Request Resource Already Deleted.', + 422: 'Validate Error.', + 500: 'Server Error Happen.', + 502: 'Gateway Error.', + 503: 'Service Not Available, Try After.', + 504: 'Gateway Timeout.' +}; + +@Injectable() +export class DefaultInterceptor implements HttpInterceptor { + private notified = false; + // Whether token is refreshing + private refreshToking = false; + private refreshToken$: BehaviorSubject = new BehaviorSubject(null); + + constructor(private injector: Injector, private authSvc: AuthService, private storageSvc: LocalStorageService) {} + + private get notification(): NzNotificationService { + return this.injector.get(NzNotificationService); + } + + private get http(): _HttpClient { + return this.injector.get(_HttpClient); + } + + private goTo(url: string): void { + setTimeout(() => { + this.injector.get(Router).navigateByUrl(url); + this.notified = false; + }); + } + + private checkStatus(ev: HttpResponseBase): void { + const errorText = CODE_MESSAGE[ev.status] || ev.statusText; + console.warn(` ${ev.status}: ${ev.url}`, errorText); + if (ev.status == 403) { + this.notification.error(` ${ev.status}: ${errorText}`, ''); + } else { + this.notification.error(` ${ev.status}: ${ev.url}`, errorText); + } + } + + /** + * refresh Token request + */ + private refreshTokenRequest(): Observable> { + const refreshToken = this.storageSvc.getRefreshToken(); + if (refreshToken == null) { + return throwError('refreshToken is null.'); + } + return this.authSvc.refreshToken(refreshToken); + } + + private tryRefreshToken(ev: HttpResponseBase, req: HttpRequest, next: HttpHandler): Observable { + // 1, redirect to login page if this request is used for refreshing token + if ([`/api/auth/refresh`].some(url => req.url.includes(url))) { + this.toLogin(); + return throwError(ev); + } + // 2, if `refreshToking` is true, means that the refreshing token request is in progress + // All requests will be suspended and wait for the refreshing token request to complete + if (this.refreshToking) { + return this.refreshToken$.pipe( + filter(v => !!v), + take(1), + switchMap(() => next.handle(this.reAttachToken(req))) + ); + } + // 3、try refreshing Token + this.refreshToking = true; + this.refreshToken$.next(null); + return this.refreshTokenRequest().pipe( + switchMap(res => { + // Check whether the TOKEN is correct + this.refreshToking = false; + if (res.code === 0 && res.data != undefined) { + let token = res.data.token; + let refreshToken = res.data.refreshToken; + if (token != undefined) { + this.storageSvc.storageAuthorizationToken(token); + this.storageSvc.storageRefreshToken(refreshToken); + // notifies subsequent requests to continue + this.refreshToken$.next(token); + return next.handle(this.reAttachToken(req)); + } else { + console.warn(`flush new token failed. ${res.msg}`); + return throwError('flush new token failed.'); + } + } else { + console.warn(`flush new token failed. ${res.msg}`); + return throwError('flush new token failed.'); + } + }), + catchError(err => { + // refreshing token is failed, redirect to login page + console.warn(`flush new token failed. ${err.msg}`); + this.refreshToking = false; + this.toLogin(); + return throwError(err); + }) + ); + } + + private reAttachToken(req: HttpRequest): HttpRequest { + let token = this.storageSvc.getAuthorizationToken(); + return req.clone({ + setHeaders: { + Authorization: `Bearer ${token}` + } + }); + } + + private toLogin(): void { + if (!this.notified) { + this.notified = true; + this.goTo('/login'); + } + } + + private fillHeaders(headers?: HttpHeaders): { [name: string]: string } { + const res: { [name: string]: string } = {}; + const lang = this.injector.get(ALAIN_I18N_TOKEN).currentLang; + if (!headers?.has('Accept-Language') && lang) { + res['Accept-Language'] = lang; + } + let token = this.storageSvc.getAuthorizationToken(); + if (token !== null) { + res['Authorization'] = `Bearer ${token}`; + } + return res; + } + + intercept(req: HttpRequest, next: HttpHandler): Observable> { + let url = req.url; + if (!url.startsWith('https://') && !url.startsWith('http://') && !url.startsWith('.')) { + const { baseUrl } = environment.api; + url = baseUrl + (baseUrl?.endsWith('/') && url.startsWith('/') ? url.substring(1) : url); + } + const newReq = req.clone({ url, setHeaders: this.fillHeaders(req.headers) }); + return next.handle(newReq).pipe( + mergeMap(httpEvent => { + if (httpEvent instanceof HttpResponseBase) { + return of(httpEvent); + } else { + return of(httpEvent); + } + }), + catchError((err: any) => { + console.error("err:",err); + // handle failed response and token expired + switch (err.status) { + case 401: + console.log('检测到401了') + return this.tryRefreshToken(err, newReq, next); + case 404: + case 500: + this.goTo(`/exception/${err.status}?url=${req.urlWithParams}`); + break; + case 400: + let resp = new HttpResponse({ + body: err.error, + headers: err.headers, + status: err.status, + statusText: err.statusText + }); + return of(resp); + default: + break; + } + this.checkStatus(err); + return throwError(err.error); + }) + ); + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/module-import-guard.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/module-import-guard.ts new file mode 100644 index 00000000000..333500797cf --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/core/module-import-guard.ts @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +export function throwIfAlreadyLoaded(parentModule: any, moduleName: string): void { + if (parentModule) { + throw new Error(`${moduleName} has already been loaded. Import Core modules in the AppModule only.`); + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/global-config.module.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/global-config.module.ts new file mode 100644 index 00000000000..3e8ba7fc997 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/global-config.module.ts @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core'; +import { DelonACLModule } from '@delon/acl'; +import { AlainThemeModule } from '@delon/theme'; + +import { throwIfAlreadyLoaded } from '@core'; + +import { environment } from '@env/environment'; + +const alainModules: any[] = [AlainThemeModule.forRoot(), DelonACLModule]; +import { NzConfig, NZ_CONFIG } from 'ng-zorro-antd/core/config'; + +const ngZorroConfig: NzConfig = {}; + +const zorroProvides = [{ provide: NZ_CONFIG, useValue: ngZorroConfig }]; + +@NgModule({ + imports: [...alainModules, ...(environment.modules || [])] +}) +export class GlobalConfigModule { + constructor(@Optional() @SkipSelf() parentModule: GlobalConfigModule) { + throwIfAlreadyLoaded(parentModule, 'GlobalConfigModule'); + } + + static forRoot(): ModuleWithProviders { + return { + ngModule: GlobalConfigModule, + providers: [...zorroProvides] + }; + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/blank/blank.component.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/blank/blank.component.ts new file mode 100644 index 00000000000..6e2b08c3d8b --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/blank/blank.component.ts @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import { Component } from '@angular/core'; + +@Component({ + selector: 'layout-blank', + template: ` `, + host: { + '[class.alain-blank]': 'true' + } +}) +export class LayoutBlankComponent {} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/layout.module.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/layout.module.ts new file mode 100644 index 00000000000..6365030fedb --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/layout.module.ts @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; +import { GlobalFooterModule } from '@delon/abc/global-footer'; +import { NoticeIconModule } from '@delon/abc/notice-icon'; +import { AlainThemeModule } from '@delon/theme'; +import { LayoutDefaultModule } from '@delon/theme/layout-default'; +import { SettingDrawerModule } from '@delon/theme/setting-drawer'; +import { ThemeBtnModule } from '@delon/theme/theme-btn'; +import { NzAutocompleteModule } from 'ng-zorro-antd/auto-complete'; +import { NzAvatarModule } from 'ng-zorro-antd/avatar'; +import { NzBadgeModule } from 'ng-zorro-antd/badge'; +import { NzDropDownModule } from 'ng-zorro-antd/dropdown'; +import { NzFormModule } from 'ng-zorro-antd/form'; +import { NzGridModule } from 'ng-zorro-antd/grid'; +import { NzIconModule } from 'ng-zorro-antd/icon'; +import { NzInputModule } from 'ng-zorro-antd/input'; +import { NzSpinModule } from 'ng-zorro-antd/spin'; + +import { LayoutMarketComponent } from './market/market.component'; +import { LayoutBlankComponent } from './blank/blank.component'; + +const COMPONENTS = [LayoutBlankComponent]; + +const MARKET = [LayoutMarketComponent]; + +import { NzModalModule } from 'ng-zorro-antd/modal'; +import { NzTagModule } from 'ng-zorro-antd/tag'; +import { NzDividerModule } from 'ng-zorro-antd/divider'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + RouterModule, + AlainThemeModule.forChild(), + ThemeBtnModule, + SettingDrawerModule, + LayoutDefaultModule, + NoticeIconModule, + GlobalFooterModule, + NzDropDownModule, + NzInputModule, + NzAutocompleteModule, + NzGridModule, + NzFormModule, + NzSpinModule, + NzBadgeModule, + NzAvatarModule, + NzIconModule, + NzModalModule, + NzTagModule, + NzDividerModule, + RouterModule, + MARKET + ], + declarations: [...COMPONENTS], + exports: [...COMPONENTS, ...MARKET,RouterModule] +}) +export class LayoutModule {} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/market/market.component.html b/template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/market/market.component.html new file mode 100644 index 00000000000..81c1999c3ea --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/market/market.component.html @@ -0,0 +1,227 @@ + + + + + + + Title + + +

    + +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    + +
    + + +
    + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/market/market.component.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/market/market.component.ts new file mode 100644 index 00000000000..4170e2ca02f --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/layout/market/market.component.ts @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {Component, OnInit} from '@angular/core'; +import {LayoutDefaultOptions} from '@delon/theme/layout-default'; +import {RouterOutlet} from "@angular/router"; +import {NzImageDirective} from "ng-zorro-antd/image"; +import {TemplateService} from "../../service/template.service"; +import {NzMessageService} from "ng-zorro-antd/message"; +import {NgIf} from "@angular/common"; +import {LocalStorageService} from "../../service/local-storage.service"; +import {DataService} from "../../service/data.service"; + +@Component({ + selector: 'app-market', + templateUrl: 'market.component.html', + standalone: true, + imports: [ + RouterOutlet, + NzImageDirective, + NgIf + ] +}) +export class LayoutMarketComponent implements OnInit{ + options: LayoutDefaultOptions = { + logoExpanded: `./assets/brand_white.svg`, + logoCollapsed: `./assets/logo.svg` + }; + constructor(private templateService: TemplateService, + private msg: NzMessageService, + private localStorageService: LocalStorageService, + private dataService: DataService + ) {} + + count=0; + isLogin:boolean = false; + + ngOnInit(): void { + this.dataService.isLoginMsg.subscribe(isLogin => this.isLogin = isLogin) + const userInfo = this.localStorageService.getData('userInfo'); + if(userInfo!=null){ + this.isLogin=true + } + + this.templateService.getTemplateCount(0,0).subscribe(message=>{ + if (message.code == 0) { + this.count=message.data; + }else{ + this.msg.error(message.error) + } + }) + } + + logout():void{ + this.localStorageService.removeData('userInfo'); + this.localStorageService.removeData('userId'); + this.localStorageService.removeData('Authorization'); + this.localStorageService.removeData('refresh-token'); + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/pojo/Message.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/pojo/Message.ts new file mode 100644 index 00000000000..82a95cb0eb9 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/pojo/Message.ts @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +export class Message { + data!: T; + msg!: string; + code: number = 0; +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/home-page/home-page.component.html b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/home-page/home-page.component.html new file mode 100644 index 00000000000..cad46c4bbf6 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/home-page/home-page.component.html @@ -0,0 +1,125 @@ + + +
    +
    +
    +
    +
    +
    +
    +
    + HertzBeat +

    + 监控模版市场 + + + + +

    +
    +
    +

    易用友好的开源实时监控系统
    快来上传、浏览、下载模版吧!

    + 开始浏览 + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + +
    +
    +

    开箱即用

    +

    集监控-告警-通知为一体,支持应用服务,Web,数据库,缓存,操作系统,中间件,大数据,云原生,网络等监控阈值告警; + 易用友好,无需Agent,全WEB页面操作

    +
    +
    +
    +
    +
    +
    + + + +
    +
    +

    高性能与自定义

    +

    将 Http,Jmx,Ssh,Snmp,Jdbc 等协议规范可配置模版化,只需在线配置YML就可自定义监控指标; 自由的告警阈值规则,消息及时送达

    +
    +
    +
    +
    +
    +
    + + + +
    +
    +

    拥抱开源

    +

    Apache HertzBeat (incubating) 的单机集群版全开源,基于 Apache2.0 License; 欢迎任何对此有兴趣的同学参与其中

    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/home-page/home-page.component.less b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/home-page/home-page.component.less new file mode 100644 index 00000000000..a76e698074b --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/home-page/home-page.component.less @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +.image-container { + display: flex; + justify-content: center; + align-items: center; + position: relative; + width: 300px; + height: 300px; + margin: auto; +} + +.img1, .img2 { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.img2 { + opacity: 0.7; +} + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/home-page/home-page.component.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/home-page/home-page.component.ts new file mode 100644 index 00000000000..f8fd8c7162f --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/home-page/home-page.component.ts @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from '@angular/core'; +import {FormBuilder, FormGroup, Validators} from '@angular/forms'; +import {window} from "rxjs"; + +@Component({ + selector: 'home-page', + templateUrl: './home-page.component.html', + styleUrls: ['./home-page.component.less'], + standalone: true, + providers: [], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class HomePageComponent implements OnInit,OnDestroy { + constructor( + fb: FormBuilder, + ) { + this.form = fb.group({ + userName: [null, [Validators.required]], + password: [null, [Validators.required]], + mobile: [null, [Validators.required, Validators.pattern(/^1\d{10}$/)]], + captcha: [null, [Validators.required]], + remember: [true] + }); + } + + count=0; + + form: FormGroup; + error = ''; + type = 0; + loading = false; + + interval$: any; + + ngOnInit(): void { + } + + ngOnDestroy(): void { + if (this.interval$) { + clearInterval(this.interval$); + } + } + + protected readonly window = window; +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/login/login.component.html b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/login/login.component.html new file mode 100644 index 00000000000..e290ad1f77a --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/login/login.component.html @@ -0,0 +1,66 @@ + + +
    +
    +
    +
    +
    +
    +
    +
    邮箱登录
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + + 忘记密码? +
    +
    +
    +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/login/login.component.less b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/login/login.component.less new file mode 100644 index 00000000000..f284cbbade4 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/login/login.component.less @@ -0,0 +1,18 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you 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. + */ diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/login/login.component.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/login/login.component.ts new file mode 100644 index 00000000000..d27e2b74b4f --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/login/login.component.ts @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {Component, Injector, OnDestroy, OnInit} from '@angular/core'; +import {FormBuilder, FormsModule} from '@angular/forms'; +import {AuthService, LoginDTO} from "../../service/auth.service"; +import {LocalStorageService} from "../../service/local-storage.service"; +import {NzMessageService} from "ng-zorro-antd/message"; +import {Router} from "@angular/router"; +import {NzButtonComponent} from "ng-zorro-antd/button"; +import {DataService} from "../../service/data.service"; + +@Component({ + selector: 'login', + templateUrl: './login.component.html', + styleUrls: ['./login.component.less'], + standalone: true, + providers: [], + imports: [ + NzButtonComponent, + FormsModule + ], + // changeDetection: ChangeDetectionStrategy.OnPush +}) +export class LoginComponent implements OnInit,OnDestroy { + constructor( + fb: FormBuilder, + private authService: AuthService, + private localStorageService: LocalStorageService, + private msg: NzMessageService, + private injector: Injector, + private dataService: DataService, + ) {} + + loginForm: LoginDTO={ + type:1, + identifier:'', + credential:'', + }; + + submitLogin():void{ + console.log(this.loginForm) + this.authService.tryLogin(this.loginForm).subscribe(response => { + if(response.code == 0) { + console.log(response); + this.localStorageService.storageAuthorizationToken(response.data.token); + this.localStorageService.storageRefreshToken(response.data.refreshToken); + this.msg.success('登录成功'); + this.localStorageService.putData('userInfo',this.loginForm.identifier); + this.localStorageService.putData('userId',response.data.id); + this.dataService.sendLoginMsg(true); + window.history.back(); + }else{ + this.msg.error('登录失败:'+response.msg) + } + }) + } + + ngOnInit(): void { + } + + ngOnDestroy(): void { + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/market-routing.module.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/market-routing.module.ts new file mode 100644 index 00000000000..bfe1c49810b --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/market-routing.module.ts @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { TemplateDetailComponent } from './template-detail/template-detail.component'; +import { TemplateListComponent } from './template-list/template-list.component'; + +const routes: Routes = [ + { path: '', component: TemplateListComponent }, + { path: 'list', component: TemplateListComponent }, + { path: 'detail', component: TemplateDetailComponent }, + { path: '**', component: TemplateListComponent } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class MarketRoutingModule {} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/market.module.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/market.module.ts new file mode 100644 index 00000000000..375be92dfde --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/market.module.ts @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {ClipboardModule} from '@angular/cdk/clipboard'; +import {NgModule, Type} from '@angular/core'; +import {NzBreadCrumbModule} from 'ng-zorro-antd/breadcrumb'; +import {NzLayoutModule} from 'ng-zorro-antd/layout'; +import {NzRadioModule} from 'ng-zorro-antd/radio'; +import {NzSpaceModule} from 'ng-zorro-antd/space'; +import {NzSwitchModule} from 'ng-zorro-antd/switch'; + +import {MarketRoutingModule} from './market-routing.module'; +import {TemplateDetailComponent} from './template-detail/template-detail.component'; +import {TemplateListComponent} from './template-list/template-list.component'; +import {NzInputDirective, NzInputGroupComponent} from "ng-zorro-antd/input"; +import {NzOptionComponent, NzSelectModule} from "ng-zorro-antd/select"; +import {NzButtonComponent} from "ng-zorro-antd/button"; +import {RouterModule} from "@angular/router"; +import {CommonModule} from "@angular/common"; +import {FormsModule} from "@angular/forms"; +import {NzPaginationComponent} from "ng-zorro-antd/pagination"; +import {NzCheckboxComponent, NzCheckboxGroupComponent} from "ng-zorro-antd/checkbox"; +import {NzIconDirective} from "ng-zorro-antd/icon"; +import {NzTooltipDirective} from "ng-zorro-antd/tooltip"; +import {NzCardComponent, NzCardMetaComponent} from "ng-zorro-antd/card"; +import {NzAvatarComponent} from "ng-zorro-antd/avatar"; + +const COMPONENTS: Array> = [TemplateListComponent, TemplateDetailComponent, TemplateListComponent]; + +@NgModule({ + imports: [ + MarketRoutingModule, + NzBreadCrumbModule, + NzSwitchModule, + NzRadioModule, + NzLayoutModule, + NzSpaceModule, + ClipboardModule, + NzInputGroupComponent, + NzOptionComponent, + NzButtonComponent, + NzInputDirective, + CommonModule, + FormsModule, + NzSelectModule, + NzPaginationComponent, + NzCheckboxComponent, + NzCheckboxGroupComponent, + NzIconDirective, + NzTooltipDirective, + NzCardComponent, + NzCardMetaComponent, + NzAvatarComponent + ], + declarations: COMPONENTS, + exports:[RouterModule] +}) +export class MarketModule {} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-detail/template-detail.component.html b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-detail/template-detail.component.html new file mode 100644 index 00000000000..d45c2feaacc --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-detail/template-detail.component.html @@ -0,0 +1,277 @@ + + +
    +
    +
    +
    +
    +
    +
    + Apache + . + HertzBeat +
    +

    + 模版 + + + + + 详情 +

    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +

    {{ (templateInfo!=null)?templateInfo.name:'xxx' }}

    +
    +
    +
    + +  {{ templateInfo.star }} +
    + +  200 +
    +
    + +  {{ templateInfo.download>=1000?((templateInfo.download/1000).toFixed(2)+'k'):templateInfo.download }} +
    +
    +
    +
    +
      +
    • 类别 :  {{ categoryStr }}
    • +
    • 标签 :  MySQL
    • +
    • 最新版本 :  {{ latestVersion?latestVersion.version:'xxx' }}
    • +
    • 最后更新时间 :  {{ templateInfo.updateTime }}
    • +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + 概要信息 : +

    {{ templateInfo.description }}

    + +
    +
    + 详细信息 : + +

    。。。。。

    +
    +
    + 其他信息 : +
      +
    • + + + + + +

      {{ templateInfo.description }}

      +
    • +
    • + + + + + +

      {{ templateInfo.description }}

      +
    • +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + +
    版本号概要更新时间下载量下载分享链接
    {{ item.version }} {{ item.description }} {{ item.createTime }} {{ item.download>=1000?((item.download/1000).toFixed(2)+'k'):item.download }} + download + share
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +

    + +

    +
    +
    就这么用
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-detail/template-detail.component.less b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-detail/template-detail.component.less new file mode 100644 index 00000000000..042f3ce1f39 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-detail/template-detail.component.less @@ -0,0 +1,18 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-detail/template-detail.component.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-detail/template-detail.component.ts new file mode 100644 index 00000000000..27f23efcdfe --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-detail/template-detail.component.ts @@ -0,0 +1,210 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {Component, OnDestroy, OnInit} from '@angular/core'; +import {saveAs} from 'file-saver'; +import {NzMessageService} from 'ng-zorro-antd/message'; + +import {TemplateService} from '../../../service/template.service'; +import {window} from "rxjs"; +import {LocalStorageService} from "../../../service/local-storage.service"; +import {StarService} from "../../../service/star.service"; +import {VersionService} from "../../../service/version.service"; + +@Component({ + selector: 'market', + templateUrl: './template-detail.component.html', + styleUrls: ['./template-detail.component.less'] +}) +export class TemplateDetailComponent implements OnInit, OnDestroy { + constructor(private templateService: TemplateService, + private msg: NzMessageService, + private localStorageService: LocalStorageService, + private starService: StarService, + private versionService: VersionService,) {} + + userId:number = 0; + + templateInfo :any = null; + categoryList: any[] = []; + latestVersion :any = null; + versionList: any[] = []; + + totalElements = 10; + totalPages = 1; + pageIndex=0; + pageSize = 2; + numberOfPages = 1; + newPageIndex=this.pageIndex; + newPageSize = this.pageSize; + pageSizeOptions:number[]=[2,5,10,20]; + + categoryStr=''; + + isStarNow:boolean = false; + + showPage = 1; + + downloadTemplateNow(): void { + this.templateService.downloadLatestTemplate(this.templateInfo.user, this.templateInfo.id, this.templateInfo.latest).subscribe(blob => { + saveAs(blob, `${this.templateInfo.name}-${this.latestVersion.version}.yml`); + this.localStorageService.removeData('nowTemplate'); + this.templateInfo.download++; + for (let item of this.versionList) { + if(item.id==this.templateInfo.latest) { + item.download++; + break; + } + } + this.localStorageService.putData('nowTemplate', JSON.stringify(this.templateInfo)); + }); + } + + downloadVersion(version:string, versionId:number): void { + this.templateService.downloadTemplate(this.templateInfo.user, this.templateInfo.id,version, versionId).subscribe(blob => { + saveAs(blob, `${this.templateInfo.name}-${version}.yml`); + for (let item of this.versionList) { + if(item.id==versionId) { + item.download++; + break; + } + } + this.localStorageService.removeData('nowTemplate'); + this.templateInfo.download++; + this.localStorageService.putData('nowTemplate', JSON.stringify(this.templateInfo)); + }); + } + + shareVersionNow(versionId:number): void { + this.versionService.shareVersion(versionId).subscribe(message=>{ + if(message.code==0){ + this.msg.success('已复制分享链接,快去发送给对方吧!'); + const selBox = document.createElement('textarea'); + selBox.style.position = 'fixed'; + selBox.style.left = '0'; + selBox.style.top = '0'; + selBox.style.opacity = '0'; + selBox.value = message.msg; + document.body.appendChild(selBox); + selBox.focus(); + selBox.select(); + document.execCommand('copy'); + document.body.removeChild(selBox); + }else{ + this.msg.error(message.msg); + } + }) + } + + ngOnInit(): void { + const user=this.localStorageService.getData("userId"); + if(user==null) this.userId=0; + else this.userId=parseInt(user); + + this.templateInfo=JSON.parse(this.localStorageService.getData('nowTemplate')); + if(this.userId!=0){ + this.starService.assertTemplateStarByUser(this.userId,this.templateInfo.id).subscribe(response => { + if(response.code == 0) { + this.isStarNow=response.data + }else{ + this.msg.error('是否收藏判断失败'+response.msg) + } + }) + } + this.versionService.getVersion(this.templateInfo.latest).subscribe(response => { + if(response.code == 0) { + this.latestVersion=response.data; + console.log(this.latestVersion); + }else { + this.msg.error('版本信息获取失败'+response.msg) + } + }) + this.categoryList=JSON.parse(this.localStorageService.getData('categoryList')); + console.log(this.templateInfo); + console.log(this.categoryList); + for (const item of this.categoryList) { + if(item.value==this.templateInfo.categoryId){ + this.categoryStr=item.label; + } + } + this.getVersions(); + } + + pageIndexChange(newIndex:number){ + this.newPageIndex=newIndex-1; + console.log("newPageIndex",this.newPageIndex,"newPageSize",this.newPageSize); + this.getVersions() + } + + pageSizeChange(newSize:number){ + this.newPageSize=newSize; + console.log("newSize",newSize,"newPageIndex",this.newPageIndex); + this.getVersions() + } + + getVersions(){ + this.versionService.getVersionPage(this.templateInfo.id,0,this.newPageIndex,this.newPageSize).subscribe(response => { + if(response.code == 0) { + this.versionList=response.data.content; + this.totalElements=response.data.totalElements; + this.totalPages=response.data.totalPages; + this.pageIndex=response.data.pageable.pageNumber; + this.pageSize=response.data.pageable.pageSize; + this.numberOfPages=response.data.numberOfElements; + } + }) + } + + starTemplate(id:number){ + const formData = new FormData(); + formData.append('user', this.userId.toString()); + formData.append('template', id.toString()); + this.starService.starTemplate(formData) + .subscribe(message=>{ + if (message.code == 0) { + this.msg.success(message.msg); + this.isStarNow=true; + this.templateInfo.star++; + }else{ + this.msg.error(message.msg); + } + }) + } + + cancelStarTemplate(id:number){ + const formData = new FormData(); + formData.append('templateId', id.toString()); + this.starService.cancelStarTemplate(this.userId,formData) + .subscribe(message=>{ + if (message.code == 0) { + this.msg.success(message.msg); + this.isStarNow=false; + this.templateInfo.star--; + }else{ + this.msg.error(message.msg); + } + }) + } + + ngOnDestroy(): void { + this.localStorageService.removeData('nowTemplate'); + } + + protected readonly window = window; +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-list/template-list.component.html b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-list/template-list.component.html new file mode 100644 index 00000000000..18037cb0672 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-list/template-list.component.html @@ -0,0 +1,229 @@ + + +
    +
    +
    +
    +
    +
    +
    + Apache + . + HertzBeat +
    +

    + 监 控 模 版 + + + + + 市 场 +

    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + +
    +
    +
    +
    + + + + + + +
    +
    +
    +
    +
    +
    +
    + +
    +

    + 模版类别 +

    +
    +
    +
    + + +
    +
    +
    +
    +

    标签

    +
    +
    +
    + Docker + Linux + K8S + SpringBoot2 + SpringBoot3 + Web + Windows +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + +
    +  {{ item.star>=1000?((item.star/1000).toFixed(2)+'k'):item.star }} +
    +
    + +
    +  {{ item.star>=1000?((item.star/1000).toFixed(2)+'k'):item.star }} +
    +
    + +
    +  {{ item.download>=1000?((item.download/1000).toFixed(2)+'k'):item.download }} +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-list/template-list.component.less b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-list/template-list.component.less new file mode 100644 index 00000000000..f5397f4f323 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-list/template-list.component.less @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +nz-select { + width: 352px; + //height: 60px; +} + +.material-symbols-outlined { + font-variation-settings: + 'FILL' 0, + 'wght' 400, + 'GRAD' 0, + 'opsz' 18 +} + +second-container { + position: absolute; + bottom: 0; + left: 0; + right: 0; + padding: 10px; +} + +/deep/ .ant-checkbox-group, .ant-collapse { + padding: 0; + line-height: 1.5715; + font-size: 17px; + color: rgba(0, 0, 0, .85); + box-sizing: border-box; + font-variant: tabular-nums; + font-feature-settings: 'tnum'; + list-style: none; +} + +/deep/ .ant-checkbox-wrapper { + display: inline-flex; + align-items: baseline; + line-height: unset; + cursor: pointer; + font-size: 17px; + font-family: "Gill Sans", sans-serif; + padding-bottom: 1rem; +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-list/template-list.component.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-list/template-list.component.ts new file mode 100644 index 00000000000..6add0fa53b0 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/market/template-list/template-list.component.ts @@ -0,0 +1,270 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {Component, OnDestroy, OnInit} from '@angular/core'; +import {NzMessageService} from 'ng-zorro-antd/message'; + +import {TemplateService, TemplateVO} from '../../../service/template.service'; +import {CategoryService} from "../../../service/category.service"; +import {StarService} from "../../../service/star.service"; +import {LocalStorageService} from "../../../service/local-storage.service"; +import {saveAs} from "file-saver"; + +declare global { + interface Window { URL: any; } +} + +window.URL = window.URL || {}; + +@Component({ + selector: 'market', + templateUrl: './template-list.component.html', + styleUrls: ['./template-list.component.less'] +}) +export class TemplateListComponent implements OnInit, OnDestroy { + constructor(private templateService: TemplateService, + private msg: NzMessageService, + private categoryService: CategoryService, + private starService: StarService, + private localStorageService: LocalStorageService,) {} + + templateList: TemplateVO[] = []; + userId:number=0; + + totalElements = 1; + totalPages = 1; + pageIndex=0; + pageSize = 9; + numberOfPages = 1; + newPageIndex= this.pageIndex; + newPageSize = this.pageSize; + pageSizeOptions:number[]=[9,18,27]; + + nameLike=''; + type = 0; + + allChecked = false; + indeterminate = true; + checkCategory:number[] = [1]; + categoryList = [ + { label: '数据库监控模版', value: 1, checked: true }, + { label: '应用服务监控模版', value: 2, checked: false }, + ]; + + orderOption = 1; + + loading = false; + + ngOnInit(): void { + this.templateList=[]; + this.categoryService.clearCategoryList(); + this.categoryService.getAllCategoryByIsDel(0).subscribe(message => { + // console.log('返回结果',message); + if (message.code == 0) { + this.categoryService.addCategoryList(message.data) + this.categoryList=[]; + this.allChecked=true; + this.indeterminate=false; + this.categoryService.getCategoryList().forEach(item=>{ + this.checkCategory.push(item.id); + this.categoryList.push({label: item.description, value: item.id, checked:true}); + }) + this.localStorageService.putData('categoryList',JSON.stringify(this.categoryList)); + }else{ + this.msg.error('类别请求失败:'+message.msg); + } + }) + + const user=this.localStorageService.getData("userId"); + if(user==null) this.userId=0; + else this.userId=parseInt(user); + + this.templateService.getTemplatePage(0, this.userId,0,9).subscribe(message => { + if (message.code == 0) { + this.templateList.push(...message.data.content); + console.log(this.templateList); + this.totalElements=message.data.totalElements; + this.totalPages=message.data.totalPages; + this.pageIndex=message.data.pageable.pageNumber; + this.pageSize=message.data.pageable.pageSize; + this.numberOfPages=message.data.numberOfElements; + // this.msg.success('查询成功'); + this.templateService.setTemplateSubject(this.templateList); + } else { + this.msg.error(message.msg); + } + }); + } + + orderOptionChange(orderValue:number) { + this.msg.warning('排序功能开发中!'); + console.log(orderValue); + } + + tagChange(){ + this.msg.warning('标签功能开发中!'); + } + + pageIndexChange(newIndex:number){ + this.newPageIndex=newIndex-1; + // console.log("newPageIndex",this.newPageIndex,"newPageSize",this.newPageSize); + this.getTemplatePageByOption() + } + + pageSizeChange(newSize:number){ + this.newPageSize=newSize; + // console.log("newSize",newSize,"newPageIndex",this.newPageIndex); + this.getTemplatePageByOption() + } + + getTemplatePageByOption(){ + this.templateService.getTemplatePageByOption(this.userId,this.allChecked,this.checkCategory,this.nameLike,this.orderOption,0,this.newPageIndex,this.newPageSize) + .subscribe(message => { + if (message.code == 0) { + this.templateList=[]; + this.templateList.push(...message.data.content); + this.totalElements=message.data.totalElements; + this.totalPages=message.data.totalPages; + this.pageIndex=message.data.pageable.pageNumber; + this.pageSize=message.data.pageable.pageSize; + this.numberOfPages=message.data.numberOfElements; + // this.msg.success('查询成功'); + this.templateService.setTemplateSubject(this.templateList); + console.log(this.templateList) + console.log(message) + } else { + this.msg.error(message.msg); + } + }) + } + + updateAllChecked(): void { + this.checkCategory=[]; + this.indeterminate = false; + if (this.allChecked) { + this.categoryList = this.categoryList.map(item => ({ + ...item, + checked: true + })); + } else { + this.categoryList = this.categoryList.map(item => ({ + ...item, + checked: false + })); + } + this.categoryList.forEach(item => { + if (item.checked) { + this.checkCategory.push(item.value); + } + }) + if(this.checkCategory.length!=0) this.getTemplatePageByOption(); + } + + updateSingleChecked(): void { + this.checkCategory=[]; + if (this.categoryList.every(item => !item.checked)) { + this.allChecked = false; + this.indeterminate = false; + } else if (this.categoryList.every(item => item.checked)) { + this.allChecked = true; + this.indeterminate = false; + } else { + this.allChecked = false; + this.indeterminate = true; + } + this.categoryList.forEach(item => { + if (item.checked) { + this.checkCategory.push(item.value); + } + }) + this.getTemplatePageByOption(); + } + + downloadLatestTemplate(id:number,user:number,latest:number,name:string){ + this.templateService.downloadLatestTemplate(user,id,latest) + .subscribe((blob:Blob)=>{ + saveAs(blob, `${name}-latest.yml`); + for (let templateVO of this.templateList) { + if(templateVO.id==id) { + templateVO.download++; + break; + } + } + }, + error => { + console.error('下载文件时发生错误:', error); + }); + } + + pickTemplate(id:number){ + this.templateService.setNowTemplate(id); + let nowTemplate = this.templateService.getNowTemplate(); + localStorage.setItem('nowTemplate', JSON.stringify(nowTemplate)); + // console.log(this.templateService.getNowTemplate()); + } + + starTemplate(id:number){ + const formData = new FormData(); + formData.append('user', this.userId.toString()); + formData.append('template', id.toString()); + this.starService.starTemplate(formData) + .subscribe(message=>{ + if (message.code == 0) { + for (let templateVO of this.templateList) { + if(templateVO.id==id) { + templateVO.starByNowUser=true; + templateVO.star++; + break; + } + } + this.msg.success(message.msg); + }else{ + this.msg.error(message.msg); + } + }) + } + + cancelStarTemplate(id:number){ + const formData = new FormData(); + formData.append('templateId', id.toString()); + this.starService.cancelStarTemplate(this.userId,formData) + .subscribe(message=>{ + if (message.code == 0) { + this.msg.success(message.msg); + for (let templateVO of this.templateList) { + if(templateVO.id==id) { + templateVO.starByNowUser=false; + templateVO.star--; + break; + } + } + }else{ + this.msg.error(message.msg); + } + }) + } + + ngOnDestroy(): void { + this.templateList=[]; + this.categoryList=[]; + this.templateService.clearTemplateSubject(); + this.categoryService.clearCategoryList(); + } + protected readonly event = event; +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/routes-routing.module.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/routes-routing.module.ts new file mode 100644 index 00000000000..0487149a4dc --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/routes-routing.module.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {Routes} from '@angular/router'; +import {LayoutMarketComponent} from '../layout/market/market.component'; +import {HomePageComponent} from './home-page/home-page.component'; +import {LoginComponent} from './login/login.component'; +import {SignUpComponent} from "./sign-up/sign-up.component"; + +export const routes: Routes = [ + { + path: '', + component: LayoutMarketComponent, + children: [ + { path: '', redirectTo: 'home-page', pathMatch: 'full' }, + { path: 'login', component: LoginComponent }, + { path: 'sign-up', component: SignUpComponent }, + { path: 'home-page', component: HomePageComponent }, + { path: 'market', loadChildren: () => import('./market/market.module').then(m => m.MarketModule) }, + { path: 'user-center', loadChildren: () => import('./user-center/user-center.module').then(m => m.UserCenterModule) } + ] + }, + { path: '**', redirectTo: 'exception/404' } +]; diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/routes.module.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/routes.module.ts new file mode 100644 index 00000000000..5ead66cfa43 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/routes.module.ts @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {NgModule, Type} from '@angular/core'; +import {NzCollapseModule} from 'ng-zorro-antd/collapse'; +import {NzDividerModule} from 'ng-zorro-antd/divider'; +import {NzListModule} from 'ng-zorro-antd/list'; +import {NzTagModule} from 'ng-zorro-antd/tag'; +import {NzTimelineModule} from 'ng-zorro-antd/timeline'; + +import {LayoutModule} from '../layout/layout.module'; +import {HomePageComponent} from './home-page/home-page.component'; +import {LoginComponent} from './login/login.component'; +import {RouterModule} from "@angular/router"; +import {NzMessageModule} from "ng-zorro-antd/message"; +import {BrowserModule} from "@angular/platform-browser"; +import {BrowserAnimationsModule} from "@angular/platform-browser/animations"; +import {FormsModule} from "@angular/forms"; +import {SignUpComponent} from "./sign-up/sign-up.component"; + +const COMPONENTS: Array> = [ + HomePageComponent,LoginComponent,SignUpComponent +]; + +@NgModule({ + imports: [ + NzTagModule, + NzTimelineModule, + NzDividerModule, + LayoutModule, + NzCollapseModule, + NzListModule, + RouterModule, + COMPONENTS, + NzMessageModule, + BrowserModule, + BrowserAnimationsModule, + FormsModule + ], + exports:[RouterModule] +}) +export class RoutesModule {} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/sign-up/sign-up.component.html b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/sign-up/sign-up.component.html new file mode 100644 index 00000000000..88e6ecf79a1 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/sign-up/sign-up.component.html @@ -0,0 +1,75 @@ + + +
    +
    +
    +
    +
    +
    +
    +
    注册
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/sign-up/sign-up.component.less b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/sign-up/sign-up.component.less new file mode 100644 index 00000000000..f284cbbade4 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/sign-up/sign-up.component.less @@ -0,0 +1,18 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you 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. + */ diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/sign-up/sign-up.component.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/sign-up/sign-up.component.ts new file mode 100644 index 00000000000..2f7625236c5 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/sign-up/sign-up.component.ts @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {Component, Injector, OnDestroy, OnInit} from '@angular/core'; +import {FormBuilder, FormsModule} from '@angular/forms'; +import {AuthService, LoginDTO, SignUpDTO} from "../../service/auth.service"; +import {LocalStorageService} from "../../service/local-storage.service"; +import {NzMessageService} from "ng-zorro-antd/message"; +import {Router} from "@angular/router"; +import {NzButtonComponent} from "ng-zorro-antd/button"; +import {DataService} from "../../service/data.service"; + +@Component({ + selector: 'login', + templateUrl: './sign-up.component.html', + styleUrls: ['./sign-up.component.less'], + standalone: true, + providers: [], + imports: [ + NzButtonComponent, + FormsModule + ], + // changeDetection: ChangeDetectionStrategy.OnPush +}) +export class SignUpComponent implements OnInit,OnDestroy { + constructor( + fb: FormBuilder, + private authService: AuthService, + private localStorageService: LocalStorageService, + private msg: NzMessageService, + private injector: Injector, + private dataService: DataService, + ) {} + + SignUpForm: SignUpDTO={ + name:'', + email:'', + password:'', + }; + + passwordOk:string=''; + + submitSignUp():void{ + // console.log(this.SignUpForm) + if(this.passwordOk!=this.SignUpForm.password) this.msg.error('密码不一致'); + if(this.SignUpForm.email==null||this.SignUpForm.name==null||this.SignUpForm.password==null) this.msg.error('信息不全'); + this.authService.register(this.SignUpForm).subscribe(response => { + console.log(response); + if(response.code == 0) { + this.msg.success('注册成功'); + // window.history.back(); + }else{ + this.msg.error('注册失败:'+response.msg) + } + }) + } + + ngOnInit(): void { + } + + ngOnDestroy(): void { + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/assets-detail/assets-detail.component.html b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/assets-detail/assets-detail.component.html new file mode 100644 index 00000000000..285b7a3f63c --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/assets-detail/assets-detail.component.html @@ -0,0 +1,349 @@ + + +
    +
    +
    +
    +
    +
    +
    + Apache + . + HertzBeat +
    +

    + 模版 + + + + + + + + + + + + + + 详情 +

    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +

    {{ templateInfo.name }}

    +
    +
    +
    + +  {{ templateInfo.star }} +
    + +  200 +
    +
    + +  {{ templateInfo.download>=1000?((templateInfo.download/1000).toFixed(2)+'k'):templateInfo.download }} +
    +
    +
    +
    +
      +
    • 类别 :  {{ categoryStr }}
    • +
    • 标签 :  MySQL
    • +
    • 最新版本 :  {{ latestVersion?latestVersion.version:'xxx' }}
    • +
    • 最后更新时间 :  {{ templateInfo.updateTime }}
    • +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + 概要信息 : +

    {{ templateInfo.description }}

    + +
    +
    + 详细信息 : + +

    。。。。。

    +
    +
    + 其他信息 : +
      +
    • + + + + + +

      {{ templateInfo.description }}

      +
    • +
    • + + + + + +

      {{ templateInfo.description }}

      +
    • +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + +
    版本号概要更新时间下载量下载分享链接
    {{ item.version }} {{ item.description }} {{ item.createTime }} {{ item.download>=1000?((item.download/1000).toFixed(2)+'k'):item.download }} + download + share
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +

    + +

    +
    +
    就这么用
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + +
    + + 版本号 + + + + + + 版本描述 + + + + + + 版本文件 + + +

    + +

    +

    点击该区域上传文件

    +
    +
    +
    +
    + + +
    + + +
    +
    +
    +
    diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/assets-detail/assets-detail.component.less b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/assets-detail/assets-detail.component.less new file mode 100644 index 00000000000..042f3ce1f39 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/assets-detail/assets-detail.component.less @@ -0,0 +1,18 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/assets-detail/assets-detail.component.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/assets-detail/assets-detail.component.ts new file mode 100644 index 00000000000..8a88605fb19 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/assets-detail/assets-detail.component.ts @@ -0,0 +1,302 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {Component, OnDestroy, OnInit} from '@angular/core'; +import {saveAs} from 'file-saver'; +import {NzMessageService} from 'ng-zorro-antd/message'; + +import {TemplateService} from '../../../service/template.service'; +import {finalize, Observable, Subscription, window} from "rxjs"; +import {LocalStorageService} from "../../../service/local-storage.service"; +import {CategoryService} from "../../../service/category.service"; +import {VersionService} from "../../../service/version.service"; +import {NzUploadChangeParam, NzUploadFile} from "ng-zorro-antd/upload"; + +interface TemplateInfo { + id: number; + name: string; + description: string; + descriptionVersion: string; + latest: number; + versions: string[]; + currentVersion: string; + user: string; + userId: number; + category: string; + categoryId: number; + download: number; + star:number; + create_time: string; + update_time: string; + off_shelf: number; + is_del: number; +} + +@Component({ + selector: 'market', + templateUrl: './assets-detail.component.html', + styleUrls: ['./assets-detail.component.less'] +}) +export class AssetsDetailComponent implements OnInit, OnDestroy { + constructor(private templateService: TemplateService, + private msg: NzMessageService, + private localStorageService: LocalStorageService, + private categoryService: CategoryService, + private versionService: VersionService,) {} + + userId:number=0; + + templateInfo :any = null; + categoryList: any[] = []; + latestVersion :any = null; + versionList: any[] = []; + + totalElements = 10; + totalPages = 1; + pageIndex=0; + pageSize = 2; + numberOfPages = 1; + newPageIndex=this.pageIndex; + newPageSize = this.pageSize; + pageSizeOptions:number[]=[2,5,10,20]; + + categoryStr=''; + + showPage = 1; + + visible = false; + + error = 'success'; + type = 0; + loading = false; + + count = 0; + interval$: any; + + fileList: NzUploadFile[] = []; + file: any[] = []; + + newTemplateInfo = { + id: 0, + name: '', + description: '模版描述', + descriptionVersion: '版本描述', + latest: 0, + currentVersion: 'v1.0.0', + user: 'user', + userId: 1, + category: '', + categoryId: 0, + download: 0, + star:0, + create_time: '2024', + update_time: '2024', + off_shelf: 0, + is_del: 0 + } as TemplateInfo; + + open(): void { + this.visible = true; + } + + close(): void { + this.visible = false; + } + + handleChange(info: NzUploadChangeParam) { + if (info.file.status !== 'uploading') { + console.log(info.file, info.fileList); + + const isLt4M = info.file.size! / 1024 / 1024 < 4; + if (!isLt4M) { + // this.message.error('Message.File.SizeFile'); + console.log('error:文件超过4M'); + } + // this.file = this.file.concat(info.file); + } + if (info.file.status === 'done') { + this.file.pop(); + // this.msg.success(`${info.file.name} file uploaded successfully`); + } else if (info.file.status === 'error') { + // this.msg.error(`${info.file.name} file upload failed.`); + } + } + + beforeUpload = (file: any) => { + while (this.file.length > 0) { + this.file.pop(); + } + console.log('beforeUpload', file); + this.file.push(file); + console.log('afterUpload', this.file); + return false; + }; + + getCategoryStr(value:number):string{ + for (const item of this.categoryList) { + if(item.value==value){ + return item.label; + } + } + return ' ' + } + + updateTemplate(): void { + if(this.file.length==0){ + this.msg.error("文件为空"); + return; + } + const formData = new FormData(); + if (this.file.length > 0) { + formData.append('file', this.file[0]); + this.newTemplateInfo.id=this.templateInfo.id; + this.newTemplateInfo.name=this.templateInfo.name; + this.newTemplateInfo.description=this.templateInfo.description; + this.newTemplateInfo.userId=this.templateInfo.user; + this.newTemplateInfo.categoryId=this.templateInfo.categoryId; + this.newTemplateInfo.category=this.getCategoryStr(this.newTemplateInfo.categoryId) + formData.append('templateDto', JSON.stringify(this.newTemplateInfo)); + const uploadTemplateRes$ = this.templateService + .upload(formData) + .pipe( + finalize(() => { + uploadTemplateRes$.unsubscribe(); + // this.tableLoading = false; + }) + ) + .subscribe( + message => { + console.log('message', message); + if (message.code === 0) { + // this.notifySvc.success(this.i18nSvc.fanyi('common.notify.edit-success'), ''); + this.msg.success(`模版文件上传成功`); + this.getVersions(); + this.close(); + } else { + this.msg.error(`模版上传失败:${message.msg}`); + // this.notifySvc.error(this.i18nSvc.fanyi('common.notify.edit-fail'), message.msg); + } + // this.loadAlertConvergeTable(); + // this.tableLoading = false; + }, + error => { + console.log('err', error); + // this.tableLoading = false; + // this.notifySvc.error(this.i18nSvc.fanyi('common.notify.edit-fail'), error.msg); + this.msg.error(`模版上传失败`, error.msg); + } + ); + } + } + + downloadTemplateNow(): void { + this.templateService.downloadLatestTemplate(this.templateInfo.user, this.templateInfo.id, this.templateInfo.latest).subscribe(blob => { + saveAs(blob, `${this.templateInfo.name}-${this.latestVersion.version}.yml`); + this.localStorageService.removeData('nowTemplate'); + this.templateInfo.download++; + this.localStorageService.putData('nowTemplate', JSON.stringify(this.templateInfo)); + }); + } + + downloadVersion(version:string, versionId:number): void { + this.templateService.downloadTemplate(this.templateInfo.user, this.templateInfo.id,version, versionId).subscribe(blob => { + saveAs(blob, `${this.templateInfo.name}-${version}.yml`); + this.localStorageService.removeData('nowTemplate'); + this.templateInfo.download++; + this.localStorageService.putData('nowTemplate', JSON.stringify(this.templateInfo)); + }); + } + + shareVersionNow(versionId:number): void { + this.versionService.shareVersion(versionId).subscribe(message=>{ + if(message.code==0){ + this.msg.success('已复制分享链接,快去发送给对方吧!'); + const selBox = document.createElement('textarea'); + selBox.style.position = 'fixed'; + selBox.style.left = '0'; + selBox.style.top = '0'; + selBox.style.opacity = '0'; + selBox.value = message.msg; + document.body.appendChild(selBox); + selBox.focus(); + selBox.select(); + document.execCommand('copy'); + document.body.removeChild(selBox); + }else{ + this.msg.error(message.msg); + } + }) + } + + ngOnInit(): void { + const user=this.localStorageService.getData("userId"); + if(user==null) this.userId=0; + else this.userId=parseInt(user); + + this.templateInfo=JSON.parse(this.localStorageService.getData('nowTemplate')); + this.versionService.getVersion(this.templateInfo.latest).subscribe(response => { + if(response.code == 0) { + this.latestVersion=response.data; + console.log(this.latestVersion); + }else { + this.msg.error('版本信息获取失败'+response.msg) + } + }) + this.categoryList=JSON.parse(this.localStorageService.getData('categoryList')); + // console.log(this.templateInfo); + // console.log(this.categoryList); + for (const item of this.categoryList) { + if(item.value==this.templateInfo.categoryId){ + this.categoryStr=item.label; + } + } + this.getVersions(); + } + + pageIndexChange(newIndex:number){ + this.newPageIndex=newIndex-1; + console.log("newPageIndex",this.newPageIndex,"newPageSize",this.newPageSize); + this.getVersions() + } + + pageSizeChange(newSize:number){ + this.newPageSize=newSize; + console.log("newSize",newSize,"newPageIndex",this.newPageIndex); + this.getVersions() + } + + getVersions(){ + this.versionService.getVersionPage(this.templateInfo.id,0,this.newPageIndex,this.newPageSize).subscribe(response => { + if(response.code == 0) { + this.versionList=response.data.content; + this.totalElements=response.data.totalElements; + this.totalPages=response.data.totalPages; + this.pageIndex=response.data.pageable.pageNumber; + this.pageSize=response.data.pageable.pageSize; + this.numberOfPages=response.data.numberOfElements; + } + }) + } + + ngOnDestroy(): void { + this.localStorageService.removeData('nowTemplate'); + } + + protected readonly window = window; +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-assets/user-assets.component.html b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-assets/user-assets.component.html new file mode 100644 index 00000000000..233b0d53c1e --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-assets/user-assets.component.html @@ -0,0 +1,192 @@ + + +
    +
    +
    +
    +
    +
    +
    + Apache + . + HertzBeat +
    +

    + 个人 + + + + + + + + + + + + + + 中心 +

    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + + + + + + + +
    +  {{ item.star>=1000?((item.star/1000).toFixed(2)+'k'):item.star }} +
    +
    + +
    +  {{ item.star>=1000?((item.star/1000).toFixed(2)+'k'):item.star }} +
    +
    + +
    +  {{ item.download>=1000?((item.download/1000).toFixed(2)+'k'):item.download }} +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-assets/user-assets.component.less b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-assets/user-assets.component.less new file mode 100644 index 00000000000..042f3ce1f39 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-assets/user-assets.component.less @@ -0,0 +1,18 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-assets/user-assets.component.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-assets/user-assets.component.ts new file mode 100644 index 00000000000..92adeaa0cd7 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-assets/user-assets.component.ts @@ -0,0 +1,231 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {Component, OnDestroy, OnInit} from '@angular/core'; +import {FormBuilder} from '@angular/forms'; +import {NzMessageService} from 'ng-zorro-antd/message'; +import {NzUploadChangeParam, NzUploadFile} from 'ng-zorro-antd/upload'; +import {finalize, window} from 'rxjs'; + +import {TemplateService} from '../../../service/template.service'; + +import {CategoryService} from "../../../service/category.service"; +import {LocalStorageService} from "../../../service/local-storage.service"; +import {saveAs} from "file-saver"; + +interface TemplateInfo { + id: number; + name: string; + description: string; + descriptionVersion: string; + latest: number; + versions: string[]; + currentVersion: string; + user: string; + userId: number; + category: string; + categoryId: number; + download: number; + star:number, + create_time: string; + update_time: string; + off_shelf: number; + is_del: number; +} + +@Component({ + selector: 'user-upload', + templateUrl: './user-assets.component.html', + styleUrls: ['./user-assets.component.less'], +}) +export class UserAssetsComponent implements OnInit,OnDestroy { + constructor(fb: FormBuilder, + private templateService: TemplateService, + private msg: NzMessageService, + private categoryService: CategoryService, + private localStorageService: LocalStorageService,) {} + + userId:number=0; + + templateList: any[] = []; + + totalElements = 1; + totalPages = 1; + pageIndex=0; + pageSize = 9; + numberOfPages = 1; + newPageIndex=this.pageIndex; + newPageSize = this.pageSize; + pageSizeOptions:number[]=[9,18,27]; + + nameLike=''; + type = 0; + + allChecked = false; + indeterminate = true; + checkCategory:number[] = [1]; + categoryList = [ + { label: '数据库监控模版', value: 1, checked: true }, + { label: '应用服务监控模版', value: 2, checked: false }, + ]; + + orderOption = 1; + + loading = false; + + ngOnInit(): void { + const user=this.localStorageService.getData("userId"); + if(user==null) this.userId=0; + else this.userId=parseInt(user); + + // this.templateList=[]; + this.categoryService.clearCategoryList(); + this.categoryService.getAllCategoryByIsDel(0).subscribe(message => { + console.log('返回结果',message); + if (message.code == 0) { + this.categoryService.addCategoryList(message.data) + this.categoryList=[]; + this.allChecked=true; + this.indeterminate=false; + this.categoryService.getCategoryList().forEach(item=>{ + this.checkCategory.push(item.id); + this.categoryList.push({label: item.description, value: item.id, checked:true}); + }) + this.localStorageService.putData('categoryList',JSON.stringify(this.categoryList)); + }else{ + this.msg.error('类别请求失败:'+message.msg); + } + }) + + this.templateService.getTemplatePageByUser(this.userId,0,this.pageSize).subscribe(message => { + if (message.code == 0) { + this.templateList.push(...message.data.content); + this.totalElements=message.data.totalElements; + this.totalPages=message.data.totalPages; + this.pageIndex=message.data.pageable.pageNumber; + this.pageSize=message.data.pageable.pageSize; + this.numberOfPages=message.data.numberOfElements; + this.msg.success('查询成功'); + this.templateService.setTemplateSubject(this.templateList); + } else { + this.msg.error(message.msg); + } + }); + } + + orderOptionChange(orderValue:number) { + // + console.log(orderValue); + } + + pageIndexChange(newIndex:number){ + this.newPageIndex=newIndex-1; + this.getTemplatePageByOption() + } + + pageSizeChange(newSize:number){ + this.newPageSize=newSize; + this.getTemplatePageByOption() + } + + getTemplatePageByOption(){ + this.templateService.getTemplatePageByOption(this.userId,this.allChecked,this.checkCategory,this.nameLike,this.orderOption,0,this.newPageIndex,this.newPageSize) + .subscribe(message => { + if (message.code == 0) { + this.templateList=[]; + this.templateList.push(...message.data.content); + this.totalElements=message.data.totalElements; + this.totalPages=message.data.totalPages; + this.pageIndex=message.data.pageable.pageNumber; + this.pageSize=message.data.pageable.pageSize; + this.numberOfPages=message.data.numberOfElements; + this.msg.success('查询成功'); + this.templateService.setTemplateSubject(this.templateList); + } else { + this.msg.error(message.msg); + } + }) + } + + updateAllChecked(): void { + this.checkCategory=[]; + this.indeterminate = false; + if (this.allChecked) { + this.categoryList = this.categoryList.map(item => ({ + ...item, + checked: true + })); + } else { + this.categoryList = this.categoryList.map(item => ({ + ...item, + checked: false + })); + } + this.categoryList.forEach(item => { + if (item.checked) { + this.checkCategory.push(item.value); + } + }) + } + + updateSingleChecked(): void { + this.checkCategory=[]; + if (this.categoryList.every(item => !item.checked)) { + this.allChecked = false; + this.indeterminate = false; + } else if (this.categoryList.every(item => item.checked)) { + this.allChecked = true; + this.indeterminate = false; + } else { + this.allChecked = false; + this.indeterminate = true; + } + this.categoryList.forEach(item => { + if (item.checked) { + this.checkCategory.push(item.value); + } + }) + } + + downloadLatestTemplate(id:number,user:number,latest:number,name:string){ + this.templateService.downloadLatestTemplate(user,id,latest) + .subscribe((blob:Blob)=>{ + saveAs(blob, `${name}-latest.yml`); + }, + error => { + console.error('下载文件时发生错误:', error); + }); + } + + pickTemplate(id:number){ + this.templateService.setNowTemplate(id); + let nowTemplate = this.templateService.getNowTemplate(); + localStorage.setItem('nowTemplate', JSON.stringify(nowTemplate)); + // console.log(this.templateService.getNowTemplate()); + } + + ngOnDestroy(): void { + this.templateList=[]; + this.categoryList=[]; + this.templateService.clearTemplateSubject(); + this.categoryService.clearCategoryList(); + } + + protected readonly window = window; +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-center-routing.module.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-center-routing.module.ts new file mode 100644 index 00000000000..6ad377039dc --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-center-routing.module.ts @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { UserUploadComponent } from './user-upload/user-upload.component'; +import {UserAssetsComponent} from "./user-assets/user-assets.component"; +import {AssetsDetailComponent} from "./assets-detail/assets-detail.component"; +import {UserStarComponent} from "./user-star/user-star.component"; + +const routes: Routes = [ + { path: '', component: UserUploadComponent }, + { path: 'upload', component: UserUploadComponent }, + { path: 'assets', component: UserAssetsComponent }, + { path: 'detail', component: AssetsDetailComponent }, + { path: 'star', component: UserStarComponent }, + { path: '**', component: UserUploadComponent } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class UserCenterRoutingModule {} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-center.module.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-center.module.ts new file mode 100644 index 00000000000..7e1742115a8 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-center.module.ts @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +import {NgModule, Type} from '@angular/core'; +import {NzDividerModule} from 'ng-zorro-antd/divider'; +import {NzUploadModule} from 'ng-zorro-antd/upload'; + +import {UserCenterRoutingModule} from './user-center-routing.module'; +import {UserUploadComponent} from './user-upload/user-upload.component'; +import {FormsModule} from "@angular/forms"; +import {CommonModule} from "@angular/common"; +import {NzOptionComponent, NzSelectComponent} from "ng-zorro-antd/select"; +import {NzAutosizeDirective, NzInputDirective, NzInputGroupComponent} from "ng-zorro-antd/input"; +import {NzFormControlComponent, NzFormDirective, NzFormItemComponent, NzFormLabelComponent} from "ng-zorro-antd/form"; +import {NzColDirective, NzRowDirective} from "ng-zorro-antd/grid"; +import {NzDatePickerComponent} from "ng-zorro-antd/date-picker"; +import {NzTimePickerComponent} from "ng-zorro-antd/time-picker"; +import {NzInputNumberComponent} from "ng-zorro-antd/input-number"; +import {NzIconDirective} from "ng-zorro-antd/icon"; +import {UserAssetsComponent} from "./user-assets/user-assets.component"; +import {NzPaginationComponent} from "ng-zorro-antd/pagination"; +import {AssetsDetailComponent} from "./assets-detail/assets-detail.component"; +import {NzDrawerComponent, NzDrawerContentDirective} from "ng-zorro-antd/drawer"; +import {NzButtonComponent} from "ng-zorro-antd/button"; +import {UserStarComponent} from "./user-star/user-star.component"; +import {NzTooltipDirective} from "ng-zorro-antd/tooltip"; +import {NzAvatarComponent} from "ng-zorro-antd/avatar"; +import {NzCardComponent, NzCardMetaComponent} from "ng-zorro-antd/card"; + +const COMPONENTS: Array> = [UserUploadComponent, UserAssetsComponent,AssetsDetailComponent,UserStarComponent]; + +@NgModule({ + + imports: [ + UserCenterRoutingModule, + NzDividerModule, + NzUploadModule, + FormsModule, + CommonModule, + NzOptionComponent, + NzSelectComponent, + NzAutosizeDirective, + NzInputDirective, + NzFormItemComponent, + NzFormLabelComponent, + NzFormControlComponent, + NzColDirective, + NzDatePickerComponent, + NzTimePickerComponent, + NzInputNumberComponent, + NzFormDirective, + NzIconDirective, + NzPaginationComponent, + NzDrawerComponent, + NzButtonComponent, + NzInputGroupComponent, + NzRowDirective, + NzDrawerContentDirective, + NzTooltipDirective, + NzAvatarComponent, + NzCardComponent, + NzCardMetaComponent, + ], + declarations: COMPONENTS, + providers:[...COMPONENTS], +}) +export class UserCenterModule {} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-star/user-star.component.html b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-star/user-star.component.html new file mode 100644 index 00000000000..464a437c533 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-star/user-star.component.html @@ -0,0 +1,208 @@ + + +
    +
    +
    +
    +
    +
    +
    + Apache + . + HertzBeat +
    +

    + 个人 + + + + + + + + + + + + + + 中心 +

    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + + + + + + + +
    +  {{ item.star>=1000?((item.star/1000).toFixed(2)+'k'):item.star }} +
    +
    + +
    +  {{ item.star>=1000?((item.star/1000).toFixed(2)+'k'):item.star }} +
    +
    + +
    +  {{ item.download>=1000?((item.download/1000).toFixed(2)+'k'):item.download }} +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-star/user-star.component.less b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-star/user-star.component.less new file mode 100644 index 00000000000..042f3ce1f39 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-star/user-star.component.less @@ -0,0 +1,18 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-star/user-star.component.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-star/user-star.component.ts new file mode 100644 index 00000000000..a06d21b9330 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-star/user-star.component.ts @@ -0,0 +1,226 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {Component, OnDestroy, OnInit} from '@angular/core'; +import {FormBuilder} from '@angular/forms'; +import {NzMessageService} from 'ng-zorro-antd/message'; + +import {TemplateService, TemplateVO} from '../../../service/template.service'; + +import {CategoryService} from "../../../service/category.service"; +import {StarService} from "../../../service/star.service"; +import {LocalStorageService} from "../../../service/local-storage.service"; +import {saveAs} from "file-saver"; + +// interface TemplateInfo { +// id: number; +// name: string; +// description: string; +// descriptionVersion: string; +// latest: number; +// versions: string[]; +// currentVersion: string; +// user: string; +// userId: number; +// category: string; +// categoryId: number; +// download: number; +// star:number, +// create_time: string; +// update_time: string; +// off_shelf: number; +// is_del: number; +// } + +@Component({ + selector: 'user-upload', + templateUrl: './user-star.component.html', + styleUrls: ['./user-star.component.less'], +}) +export class UserStarComponent implements OnInit,OnDestroy { + constructor(fb: FormBuilder, + private templateService: TemplateService, + private msg: NzMessageService, + private categoryService: CategoryService, + private starService: StarService, + private localStorageService: LocalStorageService,) {} + + userId:number=0; + + templateList: TemplateVO[] = []; + + totalElements = 1; + totalPages = 1; + pageIndex=0; + pageSize = 9; + numberOfPages = 1; + newPageIndex=this.pageIndex; + newPageSize = this.pageSize; + pageSizeOptions:number[]=[9,18,27]; + + nameLike=''; + type = 0; + + allChecked = false; + indeterminate = true; + checkCategory:number[] = [1]; + categoryList = [ + { label: '数据库监控模版', value: 1, checked: true }, + { label: '应用服务监控模版', value: 2, checked: false }, + ]; + + orderOption = 1; + + loading = false; + + ngOnInit(): void { + this.templateList=[] + const user=this.localStorageService.getData("userId"); + if(user==null) this.userId=0; + else this.userId=parseInt(user); + + this.categoryService.clearCategoryList(); + this.categoryService.getAllCategoryByIsDel(0).subscribe(message => { + console.log('返回结果',message); + if (message.code == 0) { + this.categoryService.addCategoryList(message.data) + this.categoryList=[]; + this.allChecked=true; + this.indeterminate=false; + this.categoryService.getCategoryList().forEach(item=>{ + this.checkCategory.push(item.id); + this.categoryList.push({label: item.description, value: item.id, checked:true}); + }) + this.localStorageService.putData('categoryList',JSON.stringify(this.categoryList)); + }else{ + this.msg.error('类别请求失败:'+message.msg); + } + }) + + this.starService.getTemplatePageByUserStar(this.userId,0,9).subscribe(message => { + if (message.code == 0) { + this.templateList=message.data.content; + // this.templateList.push(...message.data.content); + this.totalElements=message.data.totalElements; + this.totalPages=message.data.totalPages; + this.pageIndex=message.data.pageable.pageNumber; + this.pageSize=message.data.pageable.pageSize; + this.numberOfPages=message.data.numberOfElements; + this.msg.success('查询成功'); + this.templateService.setTemplateSubject(this.templateList); + } else { + this.msg.error(message.msg); + } + }); + } + + pageIndexChange(newIndex:number){ + this.newPageIndex=newIndex-1; + this.getTemplatePageByOption() + } + + pageSizeChange(newSize:number){ + this.newPageSize=newSize; + this.getTemplatePageByOption() + } + + getTemplatePageByOption(){ + this.templateService.getTemplatePageByOption(this.userId,this.allChecked,this.checkCategory,this.nameLike,this.orderOption,0,this.newPageIndex,this.newPageSize) + .subscribe(message => { + if (message.code == 0) { + this.templateList=[]; + this.templateList.push(...message.data.content); + this.totalElements=message.data.totalElements; + this.totalPages=message.data.totalPages; + this.pageIndex=message.data.pageable.pageNumber; + this.pageSize=message.data.pageable.pageSize; + this.numberOfPages=message.data.numberOfElements; + this.msg.success('查询成功'); + this.templateService.setTemplateSubject(this.templateList); + } else { + this.msg.error(message.msg); + } + }) + } + + downloadLatestTemplate(id:number,user:number,latest:number,name:string){ + this.templateService.downloadLatestTemplate(user,id,latest) + .subscribe((blob:Blob)=>{ + saveAs(blob, `${name}-latest.yml`); + }, + error => { + console.error('下载文件时发生错误:', error); + }); + } + + pickTemplate(id:number){ + this.templateService.setNowTemplate(id); + let nowTemplate = this.templateService.getNowTemplate(); + localStorage.setItem('nowTemplate', JSON.stringify(nowTemplate)); + // console.log(this.templateService.getNowTemplate()); + } + + starTemplate(id:number){ + const formData = new FormData(); + formData.append('user', this.userId.toString()); + formData.append('template', id.toString()); + this.starService.starTemplate(formData) + .subscribe(message=>{ + if (message.code == 0) { + for (let templateVO of this.templateList) { + if(templateVO.id==id) { + templateVO.starByNowUser=true; + templateVO.star++; + break; + } + } + this.msg.success(message.msg); + }else{ + this.msg.error(message.msg); + } + }) + } + + cancelStarTemplate(id:number){ + const formData = new FormData(); + formData.append('templateId', id.toString()); + this.starService.cancelStarTemplate(1,formData) + .subscribe(message=>{ + if (message.code == 0) { + this.msg.success(message.msg); + for (let templateVO of this.templateList) { + if(templateVO.id==id) { + templateVO.starByNowUser=false; + templateVO.star--; + break; + } + } + }else{ + this.msg.error(message.msg); + } + }) + } + + ngOnDestroy(): void { + this.templateList=[]; + this.categoryList=[]; + this.templateService.clearTemplateSubject(); + this.categoryService.clearCategoryList(); + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-upload/user-upload.component.html b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-upload/user-upload.component.html new file mode 100644 index 00000000000..0b5409d7590 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-upload/user-upload.component.html @@ -0,0 +1,169 @@ + + +
    +
    +
    +
    +
    +
    +
    + Apache + . + HertzBeat +
    +

    + 个人 + + + + + 中心 +

    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    + +
    +
    +
    新建模版
    + 按照规定格式上传自定义模版吧! +
    + + 模版名称 + + + + + + 模版类别 + + + + + + + + 模版标签 + + + + + + 首版版本号 + + + + + + 模版描述 + + + + + + 首版描述 + + + + + + 首版文件 + + +

    + +

    +

    点击该区域上传文件

    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-upload/user-upload.component.less b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-upload/user-upload.component.less new file mode 100644 index 00000000000..042f3ce1f39 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-upload/user-upload.component.less @@ -0,0 +1,18 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-upload/user-upload.component.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-upload/user-upload.component.ts new file mode 100644 index 00000000000..0c40d8a2cea --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/routes/user-center/user-upload/user-upload.component.ts @@ -0,0 +1,211 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {Component, OnDestroy, OnInit} from '@angular/core'; +import {FormBuilder} from '@angular/forms'; +import {NzMessageService} from 'ng-zorro-antd/message'; +import {NzUploadChangeParam, NzUploadFile} from 'ng-zorro-antd/upload'; +import {finalize, window} from 'rxjs'; + +import {TemplateService} from '../../../service/template.service'; + +import {CategoryService} from "../../../service/category.service"; +import {LocalStorageService} from "../../../service/local-storage.service"; + +interface TemplateInfo { + id: number; + name: string; + description: string; + descriptionVersion: string; + latest: number; + versions: string[]; + currentVersion: string; + user: string; + userId: number; + category: string; + categoryId: number; + download: number; + star:number, + create_time: string; + update_time: string; + off_shelf: number; + is_del: number; +} + +@Component({ + selector: 'user-upload', + templateUrl: './user-upload.component.html', + styleUrls: ['./user-upload.component.less'], +}) +export class UserUploadComponent implements OnInit,OnDestroy { + constructor(fb: FormBuilder, + private templateService: TemplateService, + private msg: NzMessageService, + private categoryService: CategoryService, + private localStorageService: LocalStorageService,) {} + + userId:number=0; + + error = 'success'; + type = 0; + loading = false; + + count = 0; + interval$: any; + + fileList: NzUploadFile[] = []; + file: any[] = []; + uniqueFile:any=null; + + templateInfo = { + id: 0, + name: '', + description: '模版描述', + descriptionVersion: '首版描述', + latest: 0, + currentVersion: 'v1.0.0', + user: 'user', + userId: 1, + category: '', + categoryId: 0, + download: 0, + star:0, + create_time: '2024', + update_time: '2024', + off_shelf: 0, + is_del: 0 + } as TemplateInfo; + + categoryList = [ + { label: '数据库监控模版', value: 1, checked: true }, + { label: '应用服务监控模版', value: 2, checked: false }, + ]; + + ngOnInit(): void { + const user=this.localStorageService.getData("userId"); + const userName=this.localStorageService.getData("userInfo"); + if(user==null) this.userId=0; + else this.userId=parseInt(user); + this.templateInfo.userId=this.userId; + this.templateInfo.user=userName==null?'user':userName; + + this.categoryList=[]; + this.categoryService.clearCategoryList(); + this.categoryService.getAllCategoryByIsDel(0).subscribe(message => { + if (message.code == 0) { + for (const item of message.data) { + this.categoryList.push({label: item.description, value: item.id, checked:true}); + } + this.localStorageService.putData('categoryList',JSON.stringify(this.categoryList)); + }else{ + this.msg.error('类别请求失败:'+message.msg); + } + }) + } + + getCategoryStr(value:number):string{ + for (const item of this.categoryList) { + if(item.value==value){ + return item.label; + } + } + return ' ' + } + + ngOnDestroy(): void { + if (this.interval$) { + clearInterval(this.interval$); + } + } + + handleChange(info: NzUploadChangeParam) { + if (info.file.status !== 'uploading') { + const isLt4M = info.file.size! / 1024 / 1024 < 4; + if (!isLt4M) { + // this.message.error('Message.File.SizeFile'); + console.log('error:文件超过4M'); + } + // this.file = this.file.concat(info.file); + } + if (info.file.status === 'done') { + this.file.pop(); + this.fileList.reverse() + if(this.fileList.length > 1) { + this.fileList.pop() + } + // this.msg.success(`${info.file.name} file uploaded successfully`); + } else if (info.file.status === 'error') { + this.fileList=[]; + // this.msg.error(`${info.file.name} file upload failed.`); + } + } + + beforeUpload = (file: any) => { + this.file.push(file); + this.uniqueFile=file; + this.fileList=[] + return true; + }; + + uploadTemplate(): void { + console.log('ss',this.file, this.fileList); + console.log(this.uniqueFile) + if(this.uniqueFile==null){ + this.msg.error("文件为空"); + return; + } + const formData = new FormData(); + if (this.uniqueFile != null) { + formData.append('file', this.uniqueFile); + this.templateInfo.category=this.getCategoryStr(this.templateInfo.categoryId) + formData.append('templateDto', JSON.stringify(this.templateInfo)); + const uploadTemplateRes$ = this.templateService + .upload(formData) + .pipe( + finalize(() => { + uploadTemplateRes$.unsubscribe(); + // this.tableLoading = false; + }) + ) + .subscribe( + message => { + console.log('message', message); + if (message.code === 0) { + // this.notifySvc.success(this.i18nSvc.fanyi('common.notify.edit-success'), ''); + this.msg.success(`模版文件上传成功`); + this.fileList=[] + } else { + this.msg.error(`模版上传失败:${message.msg}`); + // this.notifySvc.error(this.i18nSvc.fanyi('common.notify.edit-fail'), message.msg); + } + // this.loadAlertConvergeTable(); + // this.tableLoading = false; + }, + error => { + console.log('err', error); + // this.tableLoading = false; + // this.notifySvc.error(this.i18nSvc.fanyi('common.notify.edit-fail'), error.msg); + this.msg.error(`模版上传失败`, error.msg); + } + ); + } + } + + protected readonly window = window; +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/auth.service.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/auth.service.ts new file mode 100644 index 00000000000..0cbd1c4f472 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/auth.service.ts @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {HttpClient} from '@angular/common/http'; +import {Injectable} from '@angular/core'; +import {Observable} from 'rxjs'; + +import {Message} from '../pojo/Message'; + +const auth_login_uri = '/auth/login'; +const auth_refresh_uri = '/auth/refresh'; +const auth_register_uri = '/auth/register'; + +export interface LoginDTO { + type:number, + identifier:string, + credential:string, +} + +export interface SignUpDTO { + name:string, + email:string, + password:string, +} + +@Injectable({ + providedIn: 'root' +}) +export class AuthService { + constructor(private http: HttpClient) {} + + public tryLogin(data: LoginDTO): Observable> { + return this.http.post>(auth_login_uri,data); + } + + public register(data:SignUpDTO): Observable> { + return this.http.post>(auth_register_uri,data); + } + + public refreshToken(refreshToken: string): Observable> { + return this.http.post>(auth_refresh_uri, {"token":refreshToken}); + } + +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/category.service.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/category.service.ts new file mode 100644 index 00000000000..511fe94cb94 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/category.service.ts @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {HttpClient, HttpHeaders} from '@angular/common/http'; +import {Injectable, Optional} from '@angular/core'; +import {BehaviorSubject, Observable} from 'rxjs'; + +import {Message} from '../pojo/Message'; + +const category_uri = '/category/all'; + +@Injectable({ + providedIn: 'root' +}) +export class CategoryService { + constructor(@Optional() private http: HttpClient) {} + + private categorySubject = new BehaviorSubject([]); + + addCategoryList(arr: any[]) { + const currentData = this.categorySubject.getValue(); + this.categorySubject.next([...currentData, ...arr]); + } + + clearCategoryList() { + this.categorySubject.next([]); + } + + getCategoryList() { + return this.categorySubject.getValue(); + } + + public getAllCategoryByIsDel(isDel: number): Observable> { + if(this.http==null){ + console.log('http注册失败,为null') + } + return this.http.get>(category_uri+'/'+isDel, + {headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'}); + } + +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/data.service.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/data.service.ts new file mode 100644 index 00000000000..3be9a3c4a3b --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/data.service.ts @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import { Injectable } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; + +@Injectable() +export class DataService { + + private isLoginMessageSource = new BehaviorSubject(false); + isLoginMsg = this.isLoginMessageSource.asObservable(); + + constructor() { } + + sendLoginMsg(message: boolean) { + this.isLoginMessageSource.next(message) + } + +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/local-storage.service.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/local-storage.service.ts new file mode 100644 index 00000000000..a9c34a72e0c --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/local-storage.service.ts @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import { Injectable } from '@angular/core'; + +const AuthorizationConst = 'Authorization'; +const RefreshTokenConst = 'refresh-token'; + +@Injectable({ + providedIn: 'root' +}) +export class LocalStorageService { + constructor() {} + + public putData(key: string, value: string) { + localStorage.setItem(key, value); + } + + public removeData(key: string) { + localStorage.removeItem(key); + } + + public getData(key: string): string | null { + const data = localStorage.getItem(key); + return data === null ? null : data; + } + + public getAuthorizationToken(): string | null { + return this.getData(AuthorizationConst); + } + + public getRefreshToken(): string | null { + return this.getData(RefreshTokenConst); + } + + public storageRefreshToken(token: string) { + return this.putData(RefreshTokenConst, token); + } + + public storageAuthorizationToken(token: string) { + return this.putData(AuthorizationConst, token); + } + + public hasAuthorizationToken() { + return localStorage.getItem(AuthorizationConst) != null; + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/star.service.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/star.service.ts new file mode 100644 index 00000000000..14ebb2b9c7b --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/star.service.ts @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {HttpClient, HttpHeaders} from '@angular/common/http'; +import {Injectable, Optional} from '@angular/core'; +import {BehaviorSubject, Observable} from 'rxjs'; + +import {Message} from '../pojo/Message'; + +const template_star_uri = '/template/star'; +const star_page_user_uri='/star/page/user'; +const star_user_uri='/star'; +const star_isStar_uri='/star/isStar'; +const star_cancel_uri='/star/cancel'; + +@Injectable({ + providedIn: 'root' +}) +export class StarService { + constructor(@Optional() private http: HttpClient) {} + + public getTemplatePageByUserStar(userId: number, page:number, size:number): Observable> { + return this.http.get>(star_page_user_uri+'/'+userId+'?page='+page+'&size='+size); + } + + public getTemplateIdsByUser(userId: number): Observable> { + return this.http.get>(star_user_uri+'/'+userId); + } + + public assertTemplateStarByUser(userId: number,template:number): Observable> { + return this.http.get>(star_isStar_uri+'/'+userId+'/'+template); + } + + public cancelStarTemplate(userId: number, data:FormData): Observable> { + return this.http.post>(star_cancel_uri+'/'+userId,data); + } + + public starTemplate(data:FormData): Observable> { + return this.http.post>(template_star_uri,data); + } + +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/template.service.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/template.service.ts new file mode 100644 index 00000000000..c468260045f --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/template.service.ts @@ -0,0 +1,166 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {HttpClient, HttpHeaders} from '@angular/common/http'; +import {Injectable, Optional} from '@angular/core'; +import {BehaviorSubject, Observable} from 'rxjs'; + +import {Message} from '../pojo/Message'; + +export interface TemplateVO { + id: number; + name: string; + description: string; + latest: number; + user: number; + categoryId: number; + tag:number; + download: number; + star:number, + create_time: string; + update_time: string; + off_shelf: number; + isDel: number; + starByNowUser:boolean; +} + +const template_count_uri = '/template/count'; +const template_upload_uri = '/template/upload'; +const template_page_uri = '/template/page'; +const template_page_name_uri='/template/page/name'; +const template_page_option_uri='/template/page/option'; +const template_page_order_uri='/template/page/order'; +const template_page_user_uri='/template/page/user'; +const template_download_uri = '/template/download/'; +const template_download_latest_uri = '/template/download/latest/'; +const template_page_category_uri = '/template/page/category'; + +@Injectable({ + providedIn: 'root' +}) +export class TemplateService { + constructor(@Optional() private http: HttpClient) {} + + private templateSubject = new BehaviorSubject([]); + private nowTemplateSubject=new BehaviorSubject(''); + + setNowTemplate(id:number){ + console.log(this.getTemplateById(id)); + this.nowTemplateSubject.next(this.getTemplateById(id)); + } + + getNowTemplate(){ + return this.nowTemplateSubject.value; + } + + setTemplateSubject(item: any[]) { + this.clearTemplateSubject(); + this.templateSubject.next([...item]); + } + + clearTemplateSubject(){ + this.templateSubject.next([]); + } + + getTemplateById(id:number) { + for (const item of this.templateSubject.getValue()) { + if (item.id === id) { + return item; + } + } + return null; + } + + public upload(data: FormData): Observable> { + return this.http.post>(template_upload_uri, data); + } + + public getTemplatePage(isDel: number, userId:number, page:number, size:number): Observable> { + return this.http.get>(template_page_uri+'/'+isDel+'/'+userId+'?page='+page+'&size='+size, + {headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'}); + } + + public getTemplatePageByUser(userId: number, page:number, size:number): Observable> { + return this.http.get>(template_page_user_uri+'/'+userId+'?page='+page+'&size='+size, + {headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'}); + } + + public getTemplatePageByOption(userId:number, allCategory:boolean,category: number[],nameLike:string,orderOption:number, + isDel: number, page:number, size:number): Observable> { + var categoryStr=''; + for (const id of category) { + categoryStr+=id+'_'; + } + categoryStr=categoryStr.substring(0,categoryStr.length-1); + if(page<0){ + page=0; + } + if(nameLike!=''){ + if(allCategory){ + return this.http.get>(template_page_name_uri+'/'+nameLike+'/'+isDel+'/'+orderOption+'/'+userId+'?page='+page+'&size='+size+'&category='+category, + {headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'}); + } + else if(!allCategory){ + return this.http.get>(template_page_option_uri+'/'+nameLike+'/'+categoryStr+'/'+isDel+'/'+orderOption+'/'+userId+'?page='+page+'&size='+size+'&category='+category, + {headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'}); + } + else{ + return this.http.get>(template_page_option_uri+'/'+nameLike+'/'+categoryStr+'/'+isDel+'/'+orderOption+'/'+userId+'?page='+page+'&size='+size+'&category='+category, + {headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'}); + } + } + else{ + if(allCategory){ + return this.http.get>( + template_page_order_uri+'/'+orderOption+'/'+isDel+'/'+userId+'?page='+page+'&size='+size+'', + {headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'}); + } + else if(!allCategory&&category.length>0){ + return this.http.get>( + template_page_category_uri+'/'+categoryStr+'/'+isDel+'/'+orderOption+'/'+userId+'?page='+page+'&size='+size+'', + {headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'}); + } + else{ + return this.http.get>( + template_page_category_uri+'/'+'_'+'/'+isDel+'/'+orderOption+'/'+userId+'?page='+page+'&size='+size+'', + {headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'}); + } + } + } + + public getTemplateCount(isDel:number, offshelf:number): Observable { + return this.http.get>(`${template_count_uri}/${isDel}/${offshelf}`); + } + + public downloadTemplate(ownerId: number, templateId: number, version: string, versionId:number): Observable { + const httpOptions: Object = { + responseType: 'blob' + }; + return this.http.get(`${template_download_uri + ownerId}/${templateId}/${version}/${versionId}`, + httpOptions); + } + + public downloadLatestTemplate(user: number, templateId: number, latest: number): Observable { + const httpOptions: Object = { + responseType: 'blob' + }; + return this.http.get(`${template_download_latest_uri + user}/${templateId}/${latest}`, httpOptions); + } + +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/version.service.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/version.service.ts new file mode 100644 index 00000000000..4703bae6259 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/service/version.service.ts @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {HttpClient, HttpHeaders} from '@angular/common/http'; +import {Injectable, Optional} from '@angular/core'; +import {Observable} from 'rxjs'; + +import {Message} from '../pojo/Message'; + +const template_upload_uri = '/template/upload'; +const version_page_uri = '/version/page'; +const version_get_uri = '/version/get'; +const share_uri='/share/getShareURL'; + +@Injectable({ + providedIn: 'root' +}) +export class VersionService { + constructor(@Optional() private http: HttpClient) {} + + public upload(data: FormData): Observable> { + return this.http.post>(template_upload_uri, data); + } + + public getVersion(id: number): Observable> { + return this.http.get>(version_get_uri+'/'+id); + } + + public getVersionPage(templateId :number, isDel: number, page:number, size:number): Observable> { + return this.http.get>(version_page_uri+'/'+templateId+'/'+isDel+'?page='+page+'&size='+size, + {headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'}); + } + + public shareVersion(versionId:number): Observable> { + return this.http.get>(share_uri+'/'+versionId, + {headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'}); + } + +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/app/shared/constants.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/app/shared/constants.ts new file mode 100644 index 00000000000..74fef9fe979 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/app/shared/constants.ts @@ -0,0 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +export const CONSTANTS = { + VERSION: 'v1.6.0' +}; diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/css/style.css b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/css/style.css new file mode 100644 index 00000000000..cdf072ffe55 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/css/style.css @@ -0,0 +1,2324 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=Jost:wght@300;400;500;600;700;800;900&family=Montaga&family=Outfit:wght@300;400;500;600;700;800;900&family=Pacifico&family=Roboto:wght@300;400;500;700;900&family=Satisfy&family=Syne:wght@400;500;600;700;800&display=swap" rel="stylesheet'); +@font-face { + font-family: "sans-serif"; + font-weight: 500; + font-style: normal; + font-display: swap; +} +:root { + --tp-ff-heading: sans-serif; + + --tp-common-white: #ffffff; + --tp-common-black: #09052F; + --tp-common-black-2: #070707; + --tp-common-black-3: #000000; + --tp-common-black-4: #272F4D; + --tp-common-red: #FF3F4A; + --tp-common-green: #245757; + --tp-common-purple: #7D2EFF; + --tp-common-purple-2: #735CFC; + --tp-common-pink: #F94E41; + --tp-common-pink-2: #F8F3FF; + --tp-common-pink-3: #FAF6FC; + --tp-common-pink-4: #F43278; + --tp-heading-primary: #09052F; + --tp-grey-1: #EEEEF5; + --tp-grey-2: #F5F7FA; + --tp-grey-3: #5B646B; + --tp-grey-4: #787981; + --tp-text-body: #72747C; + --tp-theme-1: linear-gradient(90.07deg, #FF4E8D 32.43%, #AE34E8 58.79%, #3E8DFF 105.32%); + --tp-theme-2: #6B14FA; + --tp-theme-3: #951DF6; + --tp-border-1: #EFF1F5; +} + +@media (min-width: 1400px) { + .container, .container-lg, .container-md, .container-sm, .container-xl, .container-xxl { + max-width: 1250px; + } + .container-large { + max-width: 1490px; + } + .custom-container-1 { + max-width: 1270px; + } + .custom-container-3 { + max-width: 1330px; + } + .custom-container-4 { + max-width: 1420px; + } +} +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-size: 16px; + font-weight: 400; + line-height: 1.3; + overflow-x: hidden; + color: var(--tp-text-body); + font-family: sans-serif; +} + +html, body { + overflow-x: hidden; +} + +a { + text-decoration: none; + transition: 0.3s; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + font-weight: 800; + line-height: 1.1; + transition: 0.3s; + font-family: var(--tp-ff-heading), sans-serif; + color: var(--tp-heading-primary); +} + +img { + max-width: 100%; +} + +h1 { + font-size: 40px; +} + +h2 { + font-size: 32px; +} + +h3 { + font-size: 28px; +} + +h4 { + font-size: 24px; +} + +h5 { + font-size: 20px; +} + +h6 { + font-size: 16px; +} + +ul { + margin: 0; + padding: 0; +} + +p { + font-weight: 400; + font-size: 16px; + line-height: 24px; + color: var(--tp-text-body); + font-family: sans-serif; +} + +.z-index { + position: relative; + z-index: 2; +} + +.z-index-5 { + position: relative; + z-index: 5; +} + +a, +.btn, +button, +input, +select, +textarea, +li, +img, +.transition-3, +h1, +h2, +h3, +h4, +h5, +h6 { + -webkit-transition: all 0.3s ease-out 0s; + -moz-transition: all 0.3s ease-out 0s; + -ms-transition: all 0.3s ease-out 0s; + -o-transition: all 0.3s ease-out 0s; + transition: all 0.3s ease-out 0s; +} + +li { + list-style: none; +} + +a:focus, +.button:focus { + text-decoration: none; + outline: none; +} + +a:focus, +a:hover { + color: inherit; + text-decoration: none; +} + +a, +button { + color: inherit; + outline: none; + border: none; + background: transparent; +} + +button:hover { + cursor: pointer; +} + +button:focus { + outline: 0; +} + +input, +textarea { + outline: none; + color: var(--tp-theme-2); +} +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: rgb(116, 116, 116); +} +input:-moz-placeholder, +textarea:-moz-placeholder { + color: rgb(116, 116, 116); +} +input::-moz-placeholder, +textarea::-moz-placeholder { + color: rgb(116, 116, 116); +} +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: rgb(116, 116, 116); +} + +input[type=color] { + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + background: none; + border: 0; + cursor: pointer; + height: 100%; + width: 100%; + padding: 0; + border-radius: 50%; +} + +*::-moz-selection { + background: var(--tp-common-black); + color: var(--tp-common-white); + text-shadow: none; +} + +::-moz-selection { + background: var(--tp-common-black); + color: var(--tp-common-white); + text-shadow: none; +} + +::selection { + background: var(--tp-common-black); + color: var(--tp-common-white); + text-shadow: none; +} + +*::-moz-placeholder { + color: var(--tp-theme-1); + opacity: 1; +} + +*::placeholder { + color: var(--tp-theme-1); + opacity: 1; +} + +.fix { + overflow: hidden; +} + +.clear { + clear: both; +} + +.p-relative { + position: relative; +} + +input[type=text], input[type=email], input[type=tel], input[type=number], input[type=password], input[type=url], textarea { + outline: none; + background-color: #fff; + height: 64px; + width: 100%; + line-height: 56px; + font-size: 14px; + color: var(--tp-common-black); + padding-left: 25px; + padding-right: 25px; + border: 0; +} + +.tp-main-btn { + display: inline-block; + border-radius: 32px; + height: 64px; + line-height: 64px; + padding: 0 30px; + font-weight: 500; + font-size: 15px; + text-align: center; + text-transform: capitalize; + position: relative; + transition: 0.3s; + background: #FFF; + color: var(--tp-common-black); + box-shadow: 0px 1px 15px rgba(0, 0, 0, 0.06); +} +@media (max-width: 767px) { + .tp-main-btn { + padding: 0 25px; + } +} +.tp-main-btn i { + margin-left: 12px; +} +.tp-main-btn::before { + position: absolute; + content: ""; + background: linear-gradient(93.19deg, #FF4D8D 15.64%, #507EFB 84.55%); + border-radius: 32px; + width: 98%; + height: 98%; + left: 6px; + top: 6px; + transition: 0.3s; + z-index: -1; +} +.tp-main-btn:hover { + color: var(--tp-common-black); +} +.tp-main-btn:hover::before { + left: 1px; + top: 0; +} + +.btn-icon { + display:inline-flex; + align-items: center; + height: 61px; + padding: 0 50px; + /*display: inline-block;*/ + line-height: 61px; + font-weight: 500; + font-size: 16px; + text-align: center; + text-transform: uppercase; + transition: 0.3s; + background: var(--tp-common-purple-2); + color: var(--tp-common-white); +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px) { + .btn-icon { + display:inline-flex; + align-items: center; + height: 50px; + padding: 0 25px; + line-height: 50px; + font-size: 14px; + } +} +@media (max-width: 767px) { + .btn-icon { + display:inline-flex; + align-items: center; + height: 50px; + padding: 0 25px; + line-height: 50px; + font-size: 12px; + } +} +.btn-icon:hover { + background-color: #FF8717; + color: var(--tp-common-white); +} + +.btn-no-icon { + height: 61px; + padding: 0 50px; + display: inline-block; + line-height: 61px; + font-weight: 500; + font-size: 16px; + text-align: center; + text-transform: uppercase; + transition: 0.3s; + background: var(--tp-common-purple-2); + color: var(--tp-common-white); +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px) { + .btn-no-icon { + height: 50px; + padding: 0 25px; + line-height: 50px; + font-size: 14px; + } +} +@media (max-width: 767px) { + .btn-no-icon { + height: 50px; + padding: 0 25px; + line-height: 50px; + font-size: 12px; + } +} +.btn-no-icon:hover { + background-color: #FF8717; + color: var(--tp-common-white); +} + +@keyframes section-animation { + 0% { + width: 0; + } + 15% { + width: 100%; + } + 85% { + opacity: 1; + } + 90% { + width: 100%; + opacity: 0; + } + to { + width: 0; + opacity: 0; + } +} + +@keyframes scroll { + 0% { + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); + } + 100% { + -webkit-transform: translateY(8px); + -moz-transform: translateY(8px); + -ms-transform: translateY(8px); + -o-transform: translateY(8px); + transform: translateY(8px); + } +} + +.dark #preloader { + background-color: var(--tp-theme-1); +} + +#preloader { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #f7f7f7; + z-index: 999999; +} + +.preloader { + width: 50px; + height: 50px; + display: inline-block; + padding: 0px; + text-align: left; + box-sizing: border-box; + position: absolute; + top: 50%; + left: 50%; + margin-left: -25px; + margin-top: -25px; +} + +.preloader span { + position: absolute; + display: inline-block; + width: 50px; + height: 50px; + border-radius: 100%; + background: var(--tp-theme-1); + -webkit-animation: preloader 1.3s linear infinite; + animation: preloader 1.3s linear infinite; +} + +.preloader span:last-child { + animation-delay: -0.9s; + -webkit-animation-delay: -0.9s; +} + +@keyframes preloader { + 0% { + transform: scale(0, 0); + opacity: 0.5; + } + 100% { + transform: scale(1, 1); + opacity: 0; + } +} +@-webkit-keyframes preloader { + 0% { + -webkit-transform: scale(0, 0); + opacity: 0.5; + } + 100% { + -webkit-transform: scale(1, 1); + opacity: 0; + } +} + +.grey-bg { + background: var(--tp-grey-1); +} + +.theme-bg { + background: var(--tp-theme-1); +} + +.tp-breadcrumb-height { + padding-top: 65px; + padding-bottom: 110px; + background-repeat: no-repeat; + background-size: cover; + object-fit: cover; +} +@media only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-breadcrumb-height { + padding: 120px 0; + } +} + +.tp-breadcrumb__title { + font-size: 55px; + font-style: normal; + font-weight: 500; + text-transform: capitalize; +} +@media only screen and (min-width: 1400px) and (max-width: 1599px), only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-breadcrumb__title { + font-size: 50px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .tp-breadcrumb__title { + font-size: 50px; + } +} +@media only screen and (min-width: 768px) and (max-width: 991px) { + .tp-breadcrumb__title { + font-size: 45px; + } +} +@media (max-width: 767px) { + .tp-breadcrumb__title { + font-size: 40px; + } +} +.tp-breadcrumb__list { + display: inline-block; + padding: 5px 20px; + margin-bottom: 15px; + background-color: var(--tp-common-white); + border-radius: 30px; +} +.tp-breadcrumb__list span { + color: var(--tp-common-pink-4); + font-size: 14px; + font-style: normal; + font-weight: 700; + text-transform: uppercase; +} +@media only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-breadcrumb__list span { + font-size: 13px; + } +} +.tp-breadcrumb__list span.dvdr i { + color: var(--tp-common-white); + font-weight: 400; + font-size: 13px; +} + +.tp-custom-accordion .accordion-buttons { + position: relative; + width: 100%; + padding: 22px 25px; + background-color: var(--tp-common-white); + text-align: left; + font-weight: 700; + font-size: 18px; + margin-bottom: 25px; + border: 1px solid transparent; + transition: 0.3s; + border-radius: 4px; + color: var(--tp-theme-1); + line-height: 1.2; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-custom-accordion .accordion-buttons { + font-size: 17px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .tp-custom-accordion .accordion-buttons { + padding: 25px 28px; + font-size: 18px; + } +} +@media (max-width: 767px) { + .tp-custom-accordion .accordion-buttons { + font-size: 16px; + padding: 25px 40px 25px 28px; + } +} +@media only screen and (min-width: 576px) and (max-width: 767px) { + .tp-custom-accordion .accordion-buttons { + font-size: 17px; + } +} +.tp-custom-accordion .accordion-buttons::after { + position: absolute; + content: "\f068"; + font-family: sans-serif; + top: 50%; + transform: translateY(-50%); + right: 30px; + font-size: 16px; + opacity: 1; + /*color: var(--tp-common-orange);*/ +} +@media (max-width: 767px) { + .tp-custom-accordion .accordion-buttons::after { + top: 35px; + right: 25px; + font-size: 13px; + } +} +.tp-custom-accordion .accordion-buttons:not(.collapsed) { + background: rgba(255, 255, 255, 0.5); + box-shadow: 0 11px 12px 0 rgba(0, 0, 0, 0.08); +} +.tp-custom-accordion .accordion-buttons.collapsed { + border: 1px solid #E3EBF4; +} +.tp-custom-accordion .accordion-buttons.collapsed::after { + content: "\f067"; +} +.tp-custom-accordion .collapsed { + position: relative; + z-index: 99; +} +.tp-custom-accordion .accordion-body { + background-color: var(--tp-common-white); + padding-bottom: 20px; + padding-left: 25px; + padding-right: 50px; + position: relative; + font-size: 16px; + font-weight: 400; + line-height: 28px; + z-index: 1; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-custom-accordion .accordion-body { + font-size: 14px; + padding-right: 65px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px) { + .tp-custom-accordion .accordion-body { + font-size: 14px; + } +} +@media (max-width: 767px) { + .tp-custom-accordion .accordion-body { + font-size: 13px; + padding-right: 0; + } +} +.tp-custom-accordion .accordion-body::after { + position: absolute; + content: ""; + top: 6px; + left: 70px; + width: 1px; + height: 75px; + /*background-color: var(--tp-common-orange);*/ +} +@media (max-width: 767px) { + .tp-custom-accordion .accordion-body::after { + display: none; + visibility: hidden; + } +} + +.tp-service-details-faq .accordion-items { + border: 1px solid rgba(4, 18, 31, 0.08); + border-radius: 0; +} +.tp-service-details-faq .accordion-body { + border-top: 1px solid rgba(4, 18, 31, 0.08); +} + +.tp-title-shape { + position: absolute; + bottom: -20px; + left: 0; +} +@media only screen and (min-width: 768px) and (max-width: 991px) { + .tp-title-shape { + bottom: -15px; + } +} +@media (max-width: 767px) { + .tp-title-shape { + bottom: -13px; + } +} +@media only screen and (min-width: 576px) and (max-width: 767px) { + .tp-title-shape { + bottom: -20px; + } +} +.tp-title-shape svg { + animation: section-animation 4s infinite; +} + +.tp-hero-subtitle { + font-weight: 500; + font-size: 20px; + line-height: 27px; + color: var(--tp-common-black); + position: relative; + display: inline-block; + margin-bottom: 23px; +} +.tp-hero-subtitle::before { + content: ""; + width: 9px; + height: 2px; + background-color: var(--tp-common-red); + display: inline-block; + margin-right: 8px; +} +@media only screen and (min-width: 1400px) and (max-width: 1599px) { + .tp-hero-subtitle { + font-size: 16px; + } +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-hero-subtitle { + font-size: 17px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px) { + .tp-hero-subtitle { + font-size: 15px; + } +} +@media (max-width: 767px) { + .tp-hero-subtitle { + font-size: 15px; + padding: 8px 20px; + } +} + +.tp-hero-title { + font-weight: 500; + line-height: 1.1; + font-size: 70px; + text-transform: capitalize; +} +@media only screen and (min-width: 1400px) and (max-width: 1599px) { + .tp-hero-title { + font-size: 65px; + } +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-hero-title { + font-size: 65px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .tp-hero-title { + font-size: 58px; + } +} +@media only screen and (min-width: 768px) and (max-width: 991px) { + .tp-hero-title { + font-size: 50px; + } + .tp-hero-title br { + display: none; + } +} +@media (max-width: 767px) { + .tp-hero-title { + font-size: 42px; + } + .tp-hero-title br { + display: none; + } +} +@media only screen and (min-width: 576px) and (max-width: 767px) { + .tp-hero-title { + font-size: 48px; + } + .tp-hero-title br { + display: none; + } +} +@media only screen and (min-width: 440px) and (max-width: 575px) { + .tp-hero-title { + font-size: 54px; + } +} +.tp-hero-title span { + background: linear-gradient(90.07deg, #FF4E8D 32.43%, #AE34E8 58.79%, #3E8DFF 105.32%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.tp-slider-title-shape { + position: absolute; + bottom: -33px; + left: 0; +} +@media only screen and (min-width: 1400px) and (max-width: 1599px) { + .tp-slider-title-shape { + bottom: -27px; + } +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-slider-title-shape { + bottom: -27px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .tp-slider-title-shape { + bottom: -25px; + } +} +@media only screen and (min-width: 768px) and (max-width: 991px) { + .tp-slider-title-shape { + bottom: -24px; + } +} +@media (max-width: 767px) { + .tp-slider-title-shape { + bottom: -20px; + } +} +.tp-slider-title-shape svg { + animation: section-animation 4s infinite; +} + +.header-sticky { + position: fixed; + top: 0; + left: 0; + right: 0; + opacity: 1; + visibility: visible; + width: 100%; + z-index: 999; + background-color: var(--tp-common-white); + box-shadow: rgba(149, 157, 165, 0.2) 0px 8px 24px; + animation: 0.5s ease-in-out 0s normal none 1 running fadeInDown; +} + +.tp-header-top__space { + padding: 9px 0; +} + +.tp-header-top__left-box span { + color: var(--tp-common-white); + font-weight: 500; + font-size: 16px; + text-transform: capitalize; +} +@media only screen and (min-width: 992px) and (max-width: 1199px), (max-width: 767px) { + .tp-header-top__left-box span { + font-size: 14px; + } +} +@media only screen and (min-width: 576px) and (max-width: 767px) { + .tp-header-top__left-box span { + font-size: 13px; + } +} +.tp-header-top__left-box svg { + margin-right: 10px; +} +.tp-header-top__shop-box { + margin-left: 20px; +} +.tp-header-top__shop-box span { + font-weight: 500; + font-size: 16px; + color: var(--tp-common-white); + margin-right: 12px; + text-transform: capitalize; +} +.tp-header-top__shop-box > a { + font-weight: 500; + font-size: 13px; + color: var(--tp-common-white); + width: 85px; + display: inline-block; + height: 25px; + line-height: 24px; + text-align: center; + background: rgba(255, 255, 255, 0.2); + border-radius: 2px; +} + +.tp-header__main-menu { + margin-left: -35px; +} +@media only screen and (min-width: 1400px) and (max-width: 1599px) { + .tp-header__main-menu { + margin-left: -75px; + } +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-header__main-menu { + margin-left: 0px; + } +} +.tp-header__main-menu ul li { + list-style-type: none; + display: inline-block; + position: relative; + border-right: 1px solid #fff; + padding: 0 38px; +} +.tp-header__main-menu ul li:hover .submenu { + opacity: 1; + visibility: visible; + -webkit-transform: scaleY(1); + -moz-transform: scaleY(1); + -ms-transform: scaleY(1); + -o-transform: scaleY(1); + transform: scaleY(1); +} +.tp-header__main-menu ul li:hover > a { + color: var(--tp-common-pink-4); +} +.tp-header__main-menu ul li .submenu { + position: absolute; + top: 100%; + left: -5px; + width: 240px; + z-index: 999; + padding: 30px 40px; + opacity: 0; + visibility: hidden; + transition: 0.4s; + transform: scaleY(0); + transform-origin: top center; + text-align: start; + background-color: var(--tp-common-white); + border-top: 5px solid var(--tp-common-pink-4); + box-shadow: rgba(149, 157, 165, 0.2) 0 8px 24px; +} +.tp-header__main-menu ul li .submenu > li { + padding: 0; + margin: 0 0 15px; + display: block; +} +.tp-header__main-menu ul li .submenu > li:last-child { + margin-bottom: 0; +} +.tp-header__main-menu ul li .submenu > li a { + padding: 0; + font-size: 14px; + text-transform: uppercase; + color: var(--tp-common-black); + position: relative; +} +.tp-header__main-menu ul li .submenu > li a::after { + content: ""; + position: absolute; + bottom: 0; + right: 0; + left: auto; + height: 1px; + width: 0; + background-color: var(--tp-common-pink); + transition: 0.7s; + display: inline-block; +} +.tp-header__main-menu ul li .submenu > li:hover > a { + color: var(--tp-common-pink-4); +} +.tp-header__main-menu ul li .submenu > li:hover > a::after { + width: 100%; + right: auto; + left: 0; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-header__main-menu ul li { + padding: 0 28px; + } +} +.tp-header__main-menu ul li:last-child { + border-right: none; +} +.tp-header__main-menu ul li > a { + font-weight: 500; + font-size: 16px; + line-height: 22px; + color: var(--tp-common-black); + padding: 34px 0px; + display: inline-block; + text-transform: capitalize; + transition: 0.3s; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-header__main-menu ul li > a { + font-size: 15px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .tp-header__main-menu ul li > a { + font-size: 14px; + } +} + +.tp-header__chat-box { + margin-left: 43px; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-header__chat-box { + display: none; + } +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-header__chat-box { + display: none; + } +} +@media (max-width: 767px) { + .tp-header__chat-box { + display: none; + } +} +.tp-header__chat-box span { + width: 50px; + height: 50px; + line-height: 50px; + display: inline-block; + background: #735CFC; + border-radius: 50%; + text-align: center; + margin-left: 10px; +} +.tp-header__chat-box a { + font-weight: 500; + font-size: 16px; + letter-spacing: 0.05em; + text-transform: capitalize; + color: var(--tp-common-black); +} +.tp-header__icon-box span { + padding: 0 7px; + display: inline-block; +} +.tp-header__icon-box span.heart { + color: var(--tp-common-black); + font-size: 20px; + font-weight: 300; + display: inline-block; + transform: translateY(4px); +} +.tp-header__right-box { + margin-left: -120px; +} +.tp-header__right-box ul li { + display: inline-block; +} +.tp-header__icon-text { + position: absolute; + top: -11px; + right: -3px; + /*display: inline-block;*/ + font-family: "Jost", sans-serif; + font-weight: 500; + font-size: 12px; + color: var(--tp-common-white); + width: 16px; + height: 16px; + line-height: 16px; + border-radius: 50%; + background: #DD1D29; + display: flex; + align-items: center; + justify-content: center; + font-style: normal; +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-header__left-box { + padding: 10px 0; + } +} +.tp-header__logo { + width: 110px; + height: auto; +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-header__logo { + margin: 10px 0; + } +} + +.tp-header-2__bar { + margin-left: 25px; +} +.tp-header-2__bar.bar-height { + margin: 10px 0; +} +.tp-header-2__bar button i { + font-size: 23px; + color: var(--tp-common-white); + display: inline-block; + width: 50px; + height: 50px; + line-height: 50px; + text-align: center; + border-radius: 50%; + background: var(--tp-common-purple); + box-shadow: 0px 4px 8px rgba(51, 92, 154, 0.04); +} + +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-header__main-menu ul li .submenu { + position: absolute; + left: -200px; + } +} + +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-header__main-menu ul li .submenu { + position: absolute; + left: -100px; + } +} + +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .submenu { + position: absolute; + left: -200px; + } +} + +.tp-hero__bg { + padding-top: 235px; + padding-bottom: 205px; + position: relative; + z-index: -2; + background-repeat: no-repeat; + background-size: cover; +} +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .tp-hero__bg { + padding-top: 180px; + padding-bottom: 160px; + } +} +@media only screen and (min-width: 768px) and (max-width: 991px) { + .tp-hero__bg { + padding-top: 140px; + padding-bottom: 130px; + } +} +@media (max-width: 767px) { + .tp-hero__bg { + padding-top: 120px; + padding-bottom: 100px; + } +} +@media only screen and (min-width: 576px) and (max-width: 767px) { + .tp-hero__bg { + padding-top: 150px; + } +} +.tp-hero__left-text p { + font-size: 20px; + line-height: 32px; + padding-right: 50px; + margin-bottom: 40px; +} +@media only screen and (min-width: 1400px) and (max-width: 1599px) { + .tp-hero__left-text p { + font-size: 16px; + padding-right: 160px; + } +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-hero__left-text p { + font-size: 16px; + padding-right: 160px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .tp-hero__left-text p { + font-size: 15px; + padding-right: 75px; + } +} +@media only screen and (min-width: 768px) and (max-width: 991px) { + .tp-hero__left-text p { + font-size: 18px; + padding-right: 0; + } +} +@media (max-width: 767px) { + .tp-hero__left-text p { + font-size: 15px; + padding-right: 0; + } +} +.tp-hero__section-box { + padding-bottom: 30px; +} +.tp-hero__thumb-box { + padding-right: 45px; + position: relative; + z-index: 12; +} +@media only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-hero__thumb-box { + padding-right: 0; + } +} + +@media only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-hero__left-box { + margin-bottom: 90px; + } +} + +.tp-feature__border { + padding-top: 65px; + padding-bottom: 20px; + border-bottom: 1px solid var(--tp-border-1); +} +@media only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-feature__border { + border: none; + } +} +.tp-feature__content p { + margin-bottom: 0; + font-weight: 400; + font-size: 16px; + line-height: 24px; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-feature__content p { + font-size: 14px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .tp-feature__content p { + font-size: 14px; + padding-right: 70px; + } +} +@media only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-feature__content p { + font-size: 14px; + } +} +.tp-feature__title { + font-weight: 500; + font-size: 24px; + padding-bottom: 3px; + text-transform: capitalize; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-feature__title { + font-size: 22px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .tp-feature__title { + font-size: 21px; + } +} +@media only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-feature__title { + font-size: 21px; + } +} +.tp-feature__icon { + margin-right: 25px; +} +.tp-feature__item { + position: relative; +} +.tp-feature__item::after { + content: ""; + border: 1px dashed #CACACA; + height: 55px; + width: 1px; + top: 50%; + transform: translateY(-50%); + right: -30px; + position: absolute; +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-feature__item::after { + display: none; + } +} +.tp-feature__item.border-none::after { + display: none; +} + +.feature-col-2 { + margin-left: 35px; +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .feature-col-2 { + margin-left: 0; + } +} + +.feature-col-3 { + margin-left: 28px; +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .feature-col-3 { + margin-left: 0; + } +} + +.table td, .table th { + border-top: 1px solid #eaedff; +} + +.tp-service-widget { + position: sticky; + top: 150px; +} +@media only screen and (min-width: 768px) and (max-width: 991px), only screen and (min-width: 576px) and (max-width: 767px), (max-width: 767px) { + .tp-service-widget { + position: inherit; + } +} +.tp-service-widget-tab { + margin-right: 40px; +} +@media only screen and (min-width: 1400px) and (max-width: 1599px), only screen and (min-width: 1200px) and (max-width: 1399px), only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-service-widget-tab { + margin-right: 0; + } +} +.tp-service-widget-tab ul li { + list-style: none; + margin-bottom: 13px; +} +.tp-service-widget-tab ul li .active { + background-color: var(--tp-common-purple-2); + color: var(--tp-common-white); +} +.tp-service-widget-tab ul li .active i { + background-color: var(--tp-common-purple-2); +} +.tp-service-widget-tab ul li a { + position: relative; + font-weight: 600; + font-size: 18px; + line-height: 21px; + color: #101C2A; + background: #F8F8F8; + display: inline-block; + width: 100%; + padding: 24px 20px; + transition: 0.3s; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px), only screen and (min-width: 992px) and (max-width: 1199px) { + .tp-service-widget-tab ul li a { + font-size: 17px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-service-widget-tab ul li a { + font-size: 17px; + } +} +.tp-service-widget-tab ul li a:hover { + background-color: var(--tp-common-purple-2); + color: var(--tp-common-white); +} +.tp-service-widget-tab ul li a i { + position: absolute; + top: 38%; + right: 20px; + transition: 0.3s; +} + +.tp-service-contact-form { + padding: 40px 30px 10px 30px; + /*padding-bottom: 65px;*/ + background-repeat: no-repeat; + background-size: cover; +} +.tp-service-contact-form h6 { + color: var(--tp-common-black-3); + font-size: 28px; + font-weight: 500; + line-height: 30px; + letter-spacing: -1.12px; + margin-bottom: 17px; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-service-contact-form h6 { + font-size: 26px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .tp-service-contact-form h6 { + font-size: 21px; + } +} +@media only screen and (min-width: 768px) and (max-width: 991px) { + .tp-service-contact-form h6 { + font-size: 24px; + } +} +@media (max-width: 767px) { + .tp-service-contact-form h6 { + font-size: 20px; + } +} +.tp-service-contact-form span { + color: #707481; + font-size: 16px; + font-weight: 400; + line-height: 26px; + display: block; + margin-bottom: 45px; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px), only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-service-contact-form span { + font-size: 14px; + } +} + +.tp-faq-inner__customize .tp-custom-accordion .accordion-buttons { + padding: 38px 28px; +} +.tp-faq-inner__customize .tp-custom-accordion .accordion-buttons:hover { + color: var(--tp-theme-1); +} +.tp-faq-inner__customize .tp-custom-accordion .accordion-buttons::after { + top: 38px; +} +.tp-faq-inner__customize .tp-custom-accordion .accordion-buttons:not(.collapsed) { + background-color: transparent; + color: var(--tp-common-black); +} +.tp-faq-inner__customize .tp-custom-accordion .accordion-buttons:not(.collapsed):hover { + color: var(--tp-theme-1); +} +.tp-faq-inner__customize .tp-custom-accordion .accordion-body { + border-top: 1px solid rgba(0, 82, 204, 0.1); + margin: 0px 20px; + padding-left: 0; + padding-right: 0; +} +.tp-faq-inner__customize .tp-custom-accordion .accordion-buttons:not(.collapsed)::after { + color: var(--tp-common-black); +} + +.tp-contact-4__comment-agree .form-check-label { + font-size: 16px; + font-family: "DM Sans", sans-serif; + font-style: normal; + font-weight: 400; + line-height: 26px; + color: #838383; + cursor: pointer; +} +@media (max-width: 767px) { + .tp-contact-4__comment-agree .form-check-label { + padding-top: 10px; + } +} +@media only screen and (min-width: 768px) and (max-width: 991px) { + .tp-contact-4__comment-agree .form-check-label { + font-size: 14px; + } +} +@media (max-width: 767px) { + .tp-contact-4__comment-agree .form-check-label { + font-size: 14px; + } +} +@media only screen and (min-width: 576px) and (max-width: 767px) { + .tp-contact-4__comment-agree .form-check-label { + padding-top: 0px; + font-size: 12px; + } +} +.tp-contact-4__comment-agree .form-check-label span { + color: var(--tp-theme-2); +} +.tp-contact-4__comment-agree .form-check-label span.red { + color: #F32020; +} +.tp-contact-4__comment-agree input { + height: 17px; + width: 16px; + margin-right: 12px; + color: #949392; +} +.tp-contact-4__comment-agree .form-check-input:checked { + background-color: var(--tp-theme-2); + border-color: transparent; +} +.tp-contact-4__comment-agree .form-check-input:focus { + box-shadow: none; +} +.tp-contact-4__comment-agree .form-check-input.form-check-input[type=checkbox] { + border-radius: 2px; +} +@media (max-width: 767px) { + .tp-contact-4__comment-agree.label-2 .form-check-label { + font-size: 12px; + padding-top: 0px; + } +} +@media only screen and (min-width: 576px) and (max-width: 767px) { + .tp-contact-4__comment-agree.label-2 .form-check-label { + font-size: 14px; + } +} + +.tp-register__form-box { + padding: 70px 58px 70px 40px; + border: 1px solid #E0E0E0; + margin: 0 41px; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px), only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px) { + .tp-register__form-box { + padding: 70px 60px; + margin: 0; + } +} +@media (max-width: 767px) { + .tp-register__form-box { + padding: 70px 10px; + margin: 0; + } +} +@media only screen and (min-width: 576px) and (max-width: 767px) { + .tp-register__form-box { + padding: 70px 30px; + margin: 0; + } +} +.tp-register__form-title h6 { + color: var(--tp-common-black-3); + font-size: 23px; + font-weight: 500; + line-height: 28px; + text-transform: capitalize; + margin-bottom: 25px; +} +.tp-register__form-title span { + color: #696866; + font-size: 16px; + font-weight: 400; + line-height: 26px; +} +@media only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-register__form-title span { + font-size: 14px; + } + .tp-register__form-title span br { + display: none; + } +} +.tp-register__input-box { + position: relative; +} +.tp-register__input-box label { + color: var(--tp-common-black-3); + font-family: var(--tp-ff-heading), sans-serif; + font-size: 16px; + font-weight: 500; + line-height: 26px; + padding-bottom: 10px; +} +.tp-register__input-box input { + height: 60px; + line-height: 60px; + border: 1px solid #E0E0E0; + margin-bottom: 30px; +} +.tp-register__input-box input:focus { + border: 1px solid var(--tp-common-purple-2); +} + +.tp-register__input-text { + color: #F32020; + font-size: 14px; + font-weight: 500; + line-height: 26px; + position: absolute; + top: 0; + right: 0; +} +.tp-register__input-text:hover { + color: #F32020; +} + +.tp-fea-product__thumb { + text-align: center; + overflow: hidden; + border-radius: 15px; +} +.tp-fea-product__thumb img { + border-radius: 15px; + width: 100%; + transition: 0.5s; +} +.tp-fea-product__thumb-text { + border-radius: 40px; + background: #FF111F; + position: absolute; + top: 10px; + left: 10px; + display: inline-block; +} +.tp-fea-product__thumb-text span { + color: var(--tp-common-white); + font-size: 12px; + font-weight: 500; + text-transform: uppercase; + padding: 3px 15px; + display: inline-block; +} +.tp-fea-product__content { + padding: 0 15px 0; +} +.tp-fea-product__item { + padding: 13px 11px 18px; + transition: 0.3s; + border-radius: 15px; + position: relative; + z-index: 1; +} +.tp-fea-product__item:hover { + background-color: var(--tp-common-white); +} +.tp-fea-product__item:hover .template_card__icon-box { + opacity: 1; + visibility: visible; + top: 50%; + transform: translateY(-50%); +} +.tp-fea-product__item:hover .tp-fea-product__link-box { + opacity: 1; + visibility: visible; + margin-top: -17px; +} +.tp-fea-product__item:hover .tp-fea-product__price { + opacity: 0; + visibility: hidden; +} +.tp-fea-product__item:hover .tp-fea-product__thumb img { + transform: scale(1.2) rotate(-1deg); +} +.template_card__icon-box { + position: absolute; + top: 20%; + left: 36%; + /*right: 0;*/ + transition: 0.5s; + opacity: 0; + visibility: hidden; +} +.template_card__icon-box a { + border-radius: 5px; + border: 0 solid #D72323; + background: var(--tp-common-white); + width: 40px; + height: 40px; + line-height: 36px; + text-align: center; + display: inline-block; + transition: 0.3s; + margin: 0 2px; +} +.template_card__icon-box a svg { + transition: 0.3s; + color: var(--tp-common-black); + width: 20px; +} +.template_card__icon-box a:hover { + background-color: var(--tp-common-purple-2); +} +.template_card__icon-box a:hover svg { + color: var(--tp-common-white); +} + +.tp-fea-product__price { + transition: 0.3s; +} +.tp-fea-product__price span { + font-weight: 500; + font-size: 15px; + color: #ED1D24; + font-family: var(--tp-ff-heading), sans-serif; + margin-right: 8px; +} +.tp-fea-product__price del { + font-size: 15px; + color: #9695A0; + font-family: var(--tp-ff-heading), sans-serif; +} +.tp-fea-product__star { + margin-bottom: 18px; +} +.tp-fea-product__star i { + color: #FAB311; + padding-right: 2px; +} +.tp-fea-product__star i.color { + color: #D2D3DA; +} +.tp-fea-product__title-sm { + font-weight: 500; + font-size: 16px; + line-height: 23px; + text-transform: capitalize; + margin-bottom: 10px; + transition: 0.3s; +} +.tp-fea-product__title-sm:hover { + color: var(--tp-theme-2); +} + +.tp-fea-product__item-2:hover .tp-fea-product__price { + opacity: 1; + visibility: visible; +} + +.tp-product__filter{ + position: relative; +} +.tp-product__filter .nice-select { + position: relative; + background: var(--tp-common-white); + border-radius: 0; + padding: 0 80px 0 30px; + width: 100%; + height: 60px; + line-height: 60px; + border: 1px solid #e6e9e9; + font-size: 14px; + color: var(--tp-common-black); +} +.tp-product__filter .nice-select.open::after { + transform: translateY(-45%) rotate(-180deg); +} +.tp-product__filter .nice-select .option.selected { + font-weight: 400; + color: var(--tp-common-black); +} +.tp-product__filter .nice-select::after { + border: none; + background-color: transparent; + transform: translateY(-50%); + margin-top: 0; + right: 30px; + content: "\f107"; + transform-origin: center; + color: #77829D; + height: auto; + width: auto; + font-size: 20px; + font-weight: 400; +} +.tp-product__filter .nice-select ul { + padding: 25px; + width: 100%; + box-shadow: rgba(149, 157, 165, 0.2) 0px 8px 24px; + border-radius: 0; +} +.tp-product__filter .nice-select ul li { + color: #77829D; + margin-bottom: 15px; + font-weight: 400; + font-size: 16px; + padding: 0; +} +.tp-product__filter .nice-select ul li:last-child { + margin-bottom: 0; +} +.tp-product__filter .nice-select .option { + line-height: 1; + min-height: 0; +} +.tp-product__filter .nice-select.open ul { + opacity: 1; + visibility: visible; +} +.tp-product__input { + position: relative; +} +.tp-product__input input { + padding: 0 80px 0 30px; + width: 100%; + height: 40px; + line-height: 40px; + transition: 0.3s; + border: 1px solid #d9d9d9; +} +.tp-product__input input:focus { + border: 1px solid var(--tp-common-purple-2); +} + +.tp-shop-details__wrapper { + /*margin-bottom: 120px;*/ +} +@media only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-shop-details__wrapper { + /*margin-bottom: 60px;*/ + } +} + +@media (max-width: 767px) { + .tp-shop-details__quantity-wrap { + flex-wrap: wrap; + } +} +.tp-shop-details__quantity { + background-color: #F7F7F7; + width: 205px; + height: 67px; + position: relative; + margin-right: 15px; +} +@media (max-width: 767px) { + .tp-shop-details__quantity { + margin-bottom: 20px; + } +} +.tp-shop-details__quantity input { + border: 0; + background-color: transparent; + width: 100%; + height: 100%; + text-align: center; + color: var(--tp-common-black); +} +.tp-shop-details__quantity .tp-cart-minus { + position: absolute; + top: 0; + left: 0; + height: 64px; + width: 64px; + line-height: 64px; + text-align: center; + color: var(--tp-common-black); +} +.tp-shop-details__quantity .tp-cart-plus { + position: absolute; + top: 0; + right: 0; + height: 64px; + width: 64px; + line-height: 64px; + text-align: center; + color: var(--tp-common-black); +} +.tp-shop-details__btn { + line-height: 0; +} +@media (max-width: 767px) { + .tp-shop-details__btn { + margin-bottom: 10px; + } +} + +@media only screen and (min-width: 768px) and (max-width: 991px) { + .tp-shop-details__right-warp { + margin-bottom: 50px; + } +} +.tp-shop-details__title-sm { + font-weight: 700; + font-size: 28px; + color: #060728; + padding-bottom: 15px; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-shop-details__title-sm { + font-size: 32px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .tp-shop-details__title-sm { + font-size: 29px; + } +} +@media only screen and (min-width: 768px) and (max-width: 991px) { + .tp-shop-details__title-sm { + font-size: 29px; + } + .tp-shop-details__title-sm br { + display: none; + } +} +@media (max-width: 767px) { + .tp-shop-details__title-sm { + font-size: 30px; + } + .tp-shop-details__title-sm br { + display: none; + } +} + +.tp-shop-details__product-info { + margin-bottom: 30px; +} +.tp-shop-details__product-info ul li { + color: rgba(20, 33, 43, 0.8); + font-size: 15px; + font-weight: 400; + margin-bottom: 23px; + list-style-type: none; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-shop-details__product-info ul li { + font-size: 17px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .tp-shop-details__product-info ul li { + font-size: 15px; + } +} +@media (max-width: 767px) { + .tp-shop-details__product-info ul li { + font-size: 16px; + } +} +.tp-shop-details__product-info ul li:last-child { + margin-bottom: 0; +} +.tp-shop-details__product-info ul li > span { + color: #232323; + font-family: var(--tp-ff-heading), serif; + font-size: 16px; + font-weight: 600; +} + +.pro-details-nav { + background: #F9FAFB; + display: inline-block; + padding: 7px 7px; +} + +.pro-details-nav-btn { + border: none; +} +.pro-details-nav-btn li { + font-weight: 500; + font-size: 18px; + color: var(--tp-text-body); + position: relative; +} +.pro-details-nav-btn li button span { + position: relative; + z-index: 9; +} +.pro-details-nav-btn li button::before { + content: ""; + height: 100%; + width: 102%; + top: 0; + left: -1px; + background: #fff; + position: absolute; + z-index: 3; + opacity: 0; + visibility: hidden; +} +.pro-details-nav-btn li button.active::before { + opacity: 1; + visibility: visible; +} +.pro-details-nav-btn li::after { + position: absolute; + content: ""; + height: 40px; + width: 1px; + background: #DFE3E9; + top: 50%; + transform: translateY(-50%); +} +@media (max-width: 767px) { + .pro-details-nav-btn li::after { + display: none; + } +} +.pro-details-nav-btn li:last-child::after { + display: none; +} +@media (max-width: 767px) { + .pro-details-nav-btn li { + font-size: 16px; + } +} +.pro-details-nav-btn li .nav-links { + padding: 20px 45px; + border-radius: 5px; +} +@media only screen and (min-width: 768px) and (max-width: 991px) { + .pro-details-nav-btn li .nav-links { + padding: 10px 20px; + } +} +@media (max-width: 767px) { + .pro-details-nav-btn li .nav-links { + padding: 5px 15px; + } +} +.pro-details-nav-btn li .nav-links.active { + background: var(--tp-common-white); + color: var(--tp-common-black); +} + +.table .add-info { + font-size: 18px; + font-weight: 500; +} + +.table td { + padding: 18px; +} + +.product-details-list-box > span { + color: var(--tp-common-black-3); + font-size: 22px; + font-weight: 700; + display: block; + margin-bottom: 30px; +} +.product-details-list-box ul { + display: inline-block; +} +.product-details-list-box ul li { + color: #445658; + font-size: 16px; + font-weight: 400; + width: 50%; + float: left; + padding-left: 30px; + position: relative; + padding-bottom: 22px; +} +@media only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .product-details-list-box ul li { + width: 100%; + } +} +.product-details-list-box ul li svg { + color: var(--tp-common-purple-2); + position: absolute; + top: 3px; + left: 0; +} + +.tp-shop-widget-title { + color: var(--tp-common-black-3); + font-family: var(--tp-ff-heading), sans-serif; + font-size: 18px; + font-weight: 500; + text-transform: capitalize; + padding-bottom: 5px; + margin-bottom: 20px; +} + +.tp-shop-widget-tag span { + color: #77787B; + font-size: 14px; + font-weight: 500; + text-transform: capitalize; + display: inline-block; + padding: 0 15px; + height: 36px; + line-height: 36px; + background-color: #F6F6F6; + border-radius: 30px; + margin-bottom: 15px; + margin-right: 3px; + transition: 0.3s; +} +.tp-shop-widget-tag span:hover { + background-color: var(--tp-common-purple-2); + color: var(--tp-common-white); +} +.tp-shop-widget-categories { + height: 300px; + overflow-y: scroll; + overscroll-behavior-y: contain; + scrollbar-width: none; + padding-right: 10px; +} + +.tp-shop-widget-categories ul li { + list-style: none; + width: 100%; +} +.tp-shop-widget-categories ul li:not(:last-child) { + margin-bottom: 30px; +} +.tp-shop-widget-categories ul li a { + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; +} +.tp-shop-widget-categories ul li a:hover { + color: var(--tp-common-purple-2); +} +.tp-shop-widget-categories ul li a:hover::after { + background-color: var(--tp-common-purple-2); +} + +.tp-footer__logo { + padding-bottom: 22px; + width: 110px; + height: auto; +} +.tp-footer__icon { + margin-right: 15px; +} +.tp-footer__text p { + font-weight: 500; + font-size: 18px; + line-height: 30px; + margin-bottom: 35px; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-footer__text p { + font-size: 15px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-footer__text p { + font-size: 14px; + } +} +.tp-footer__text a { + font-weight: 500; + font-size: 18px; + color: var(--tp-common-black); +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-footer__text a { + font-size: 15px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-footer__text a { + font-size: 14px; + } +} +.tp-footer__widget-title { + font-weight: 500; + font-size: 22px; + margin-bottom: 25px; + padding-top: 5px; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-footer__widget-title { + font-size: 20px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-footer__widget-title { + font-size: 18px; + } +} +.tp-footer__list ul li { + font-weight: 500; + font-size: 18px; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-footer__list ul li { + font-size: 15px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-footer__list ul li { + font-size: 14px; + } +} +.tp-footer__list ul li:not(:last-child) { + padding-bottom: 16px; +} +.tp-footer__list ul li a { + position: relative; +} +.tp-footer__list ul li a:hover::after { + opacity: 1; + visibility: visible; + width: 100%; +} +.tp-footer__list ul li a::after { + content: ""; + top: 50%; + left: 0; + width: 0%; + height: 1px; + background-color: var(--tp-common-purple); + position: absolute; + opacity: 0; + visibility: hidden; + transition: 0.3s; + transform: translateY(-50%); +} + +.footer-col-2 { + margin-left: 50px; +} +@media only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .footer-col-2 { + margin-left: 0; + } +} + +.footer-col-3 { + margin-left: 100px; +} +@media only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .footer-col-3 { + margin-left: 0; + } +} + +.tp-copyright__border { + border-top: 1px solid #DFDFEA; + padding: 21px 0; +} + +.tp-copyright__text { + margin-left: -45px; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px), only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px), (max-width: 767px) { + .tp-copyright__text { + margin-left: 0; + } +} +.tp-copyright__text span { + font-weight: 500; + font-size: 16px; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-copyright__text span { + font-size: 15px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px) { + .tp-copyright__text span { + font-size: 14px; + } +} +@media (max-width: 767px) { + .tp-copyright__text span { + font-size: 13px; + } +} +.tp-copyright__text span i { + font-style: normal; + color: var(--tp-common-black); +} +.tp-copyright__text a { + font-weight: 500; + font-size: 16px; +} +@media only screen and (min-width: 1200px) and (max-width: 1399px) { + .tp-copyright__text a { + font-size: 15px; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px), only screen and (min-width: 768px) and (max-width: 991px) { + .tp-copyright__text a { + font-size: 14px; + } +} +@media (max-width: 767px) { + .tp-copyright__text a { + font-size: 13px; + } +} +.tp-copyright__text a i { + font-style: normal; + color: var(--tp-common-black); +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/1-img.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/1-img.svg new file mode 100644 index 00000000000..83f4e276480 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/1-img.svg @@ -0,0 +1 @@ + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/2-img.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/2-img.svg new file mode 100644 index 00000000000..53232b20413 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/2-img.svg @@ -0,0 +1 @@ + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/3-img.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/3-img.svg new file mode 100644 index 00000000000..71dfa308b8e --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/3-img.svg @@ -0,0 +1 @@ + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/4-img.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/4-img.svg new file mode 100644 index 00000000000..4debe4cac54 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/4-img.svg @@ -0,0 +1 @@ + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/5-img.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/5-img.svg new file mode 100644 index 00000000000..d8b05aeb71e --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/5-img.svg @@ -0,0 +1 @@ + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/6-img.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/6-img.svg new file mode 100644 index 00000000000..0e5b07dcfa1 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/6-img.svg @@ -0,0 +1 @@ + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/brand.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/brand.svg new file mode 100644 index 00000000000..7525f3a828d --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/brand.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/brand_white.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/brand_white.svg new file mode 100644 index 00000000000..feae3b715d0 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/brand_white.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/breadcrumb.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/breadcrumb.svg new file mode 100644 index 00000000000..ee3f992c0ed --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/breadcrumb.svg @@ -0,0 +1,226 @@ + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/cancel-star.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/cancel-star.svg new file mode 100644 index 00000000000..8a78fcec65a --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/cancel-star.svg @@ -0,0 +1,24 @@ + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/circle.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/circle.svg new file mode 100644 index 00000000000..3f4aa63304d --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/circle.svg @@ -0,0 +1,1463 @@ + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/detail.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/detail.svg new file mode 100644 index 00000000000..21282d4f383 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/detail.svg @@ -0,0 +1,36 @@ + + + + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/download.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/download.svg new file mode 100644 index 00000000000..97dea676c2c --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/download.svg @@ -0,0 +1,40 @@ + + + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/email.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/email.svg new file mode 100644 index 00000000000..89d3f43d7bd --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/email.svg @@ -0,0 +1,34 @@ + + + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/github.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/github.svg new file mode 100644 index 00000000000..990f302f291 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/github.svg @@ -0,0 +1,34 @@ + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/hand.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/hand.svg new file mode 100644 index 00000000000..9c0fd0d4704 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/hand.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-1.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-1.svg new file mode 100644 index 00000000000..de34b1dc513 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-1.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-2.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-2.svg new file mode 100644 index 00000000000..62c01bdca1c --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-2.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-3.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-3.svg new file mode 100644 index 00000000000..f5f860a1910 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-3.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-page-bg.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-page-bg.svg new file mode 100644 index 00000000000..41ba031d32e --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/home-page-bg.svg @@ -0,0 +1,1657 @@ + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/i18n.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/i18n.svg new file mode 100644 index 00000000000..a499deaf9e5 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/i18n.svg @@ -0,0 +1,51 @@ + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/logo.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/logo.svg new file mode 100644 index 00000000000..33a4012a9f0 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/logo.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/logo_white.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/logo_white.svg new file mode 100644 index 00000000000..14f3b138203 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/logo_white.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/mysql-img.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/mysql-img.svg new file mode 100644 index 00000000000..d67c845ac9e --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/mysql-img.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/star.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/star.svg new file mode 100644 index 00000000000..c7a85d0f348 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/star.svg @@ -0,0 +1,24 @@ + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/title-line.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/title-line.svg new file mode 100644 index 00000000000..36f5f22cdb5 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/title-line.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/upload-bg.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/upload-bg.svg new file mode 100644 index 00000000000..e2dde9430ae --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/upload-bg.svg @@ -0,0 +1,1598 @@ + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/user-center.svg b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/user-center.svg new file mode 100644 index 00000000000..47a054a1dfc --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/assets/svg/user-center.svg @@ -0,0 +1,40 @@ + + + + + + + + + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/environments/environment.prod.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/environments/environment.prod.ts new file mode 100644 index 00000000000..ff182733454 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/environments/environment.prod.ts @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import { Environment } from '@delon/theme'; + +export const environment = { + production: true, + useHash: false, + api: { + baseUrl: 'http://localhost:8081/api/', + refreshTokenEnabled: true + } +} as Environment; diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/environments/environment.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/environments/environment.ts new file mode 100644 index 00000000000..3851eec9ace --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/environments/environment.ts @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +import { Environment } from '@delon/theme'; + +export const environment = { + production: false, + useHash: false, + api: { + // baseUrl: 'http://localhost:1157/api/', + baseUrl: 'http://localhost:8080/api/', + refreshTokenEnabled: true + } +} as Environment; + +/* + * In development mode, to ignore zone related error stack frames such as + * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can + * import the following file, but please comment it out in production mode + * because it will have performance impact when throw error + */ +// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/favicon.ico b/template-marketplace/hertzbeat-template-hub-web-app/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7a6cba72e7a3fe1af0d358301f9e3463d42c3a99 GIT binary patch literal 2540 zcmVsTOch!w64JEkJ4RwVZ!Hp{s z0vHk?0mKCcNQ;XSCD<_(rGzHa!L$l9?|Q%2zS>UPnfLBJw{zRRUjm&@-#}-+cg{WE zx%b^Ch=D`-{_K4ze}|ORAxP$>6rDsetA3QF6^AIO_g)|&285u?Ud21}N};Pjh6vIm z5XbX-q?Fz2+ipsz#enccpNVL(g_@QzDWDBm$uSNdDrE zdPmk23aPH*R}N5;>THtr1RcU>UF)C)Q{U8h)JqAAMy+vcUZD_*P?-`Ios^e)@0Dv^ z-&8+8N2sa70b^2@AEMk_E!3R5 zKX|TOs?hE8cWC(FD2<#fQo_7s(_R@}pk90vM3k*)%Dvq}n?8Ar(wWqP#|(crN`s$W zS5a1>ggHz{RWL^RV!ftqXR8{|Qj{=0I3wcA=UzE1hx2qp6v%g42RsC|$E#c6@wVwOa3eaaFRcLYd@a z*DF5V)Hlv#dRc`s$;abtF5V8hLUEb+G%>Q6W*5<$X>Xc*t%^qO{#rH7>-5H`(%?98 zz$?@um|e7R&>g7$zaaE)eSZe)Fl>-EsAf5ECiO)zyO;&u^3{fUPY68M@kO4VKh|z# z0#f%RwGgjc$2fUQQ8J&+NusgMscfrX091N$E~j zeKt%XM8cFo+%Y1*^I_t`RPuJ-*E>39gVW#0zY6wWzLvZX#3 zmm}lCgD7k3a16Idz)2tF;xcAL6}lR=+DV9{=jtq|)PZ}AB1`IXx#Gj`hLx?jvhn80 zVlcpC?7;J_FK2@#$Tr}f2xSqf(F;GKfGZpEXR+X3p3Rc_bbDdT8BVhcScF==v5699 zGtRtNhbN+vOFHK;;i6Ewy|Cp>x#Zv&WwSI#X8{$|Qrm~Z$*RwW*@ZCZDhwaIJuMRa z5Y|I9FM$Ryw~ul*qAq=KjfVD*%!(we-TP_#Alq6wTiCcD&sZoMW*3pP(1J<`hwEcq z#>T2&LbhfxST+UU=Bj5d38(nmGo znq96ngqJ@q%n~UC1&(f!V{7*rBcU3#OACj|9^5lbBPSN#co{A zqX0qSmE!z=E^chnkkmIek9Ua+d=5JAwIU0V6jvnB*`NwnC!(>7 zHRjk9AL$CBpu2$dIHX!bI%tni7Ask8p@Zk*Zi8ub#BiysqucqgWp;tKP$rwN-??I5OxUDJ({|X7D6LzfAu4n`%&sr@(k&)R z7EeGWl+eC+-SGGEw_L*no$IO3HM6TIctXel(gbapI8gN87CfKm4>ACz zGfFB8XH%ELZ5?#6_1>hQ%bw>8?T7*p;N12r!SumGT>?bixnL=>+eHL0*~-oqD(wxV z?~-?T6;<|=AxLTXgDrAaPZ>t!?2(gW&ikgB=uY$7ERej4cP5QnhaPLYct(BSO$?x| zbMwT~y|=DzL13{oAHaR%!@Gu_rGx<8wGy_>uJA-3z6L^-{q$ba^i#_XU4J-oYK&}v zv=@BEUr2u{s`@A);Odvrw&e*ys<*N4x)9<3(jFd9w~&&k`X7AgQD=lv>BgNsj*91d zyQd$A50a>w4Hm*+fo83VNeF7o8%im6htUK?^#Q5^>?h_sT`y%Y?}lrKb8ogxdo1+y z&&rI?bbu9?vU=1geMeeY^4m8c>D98}p4x)kG31BuRyA6jiG0tCi}i zi6s=6D&Kq6!*?kmE`dO0O7BI3A-iO#TC)*FRuhd_-OV0000 + + + + + + HertzBeatTemplateHubWebApp + + + + + + + + + + + + + + + +
    + + diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/main.ts b/template-marketplace/hertzbeat-template-hub-web-app/src/main.ts new file mode 100644 index 00000000000..33e2351d0d2 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/main.ts @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import {enableProdMode, EnvironmentInjector, Injector, PLATFORM_ID, runInInjectionContext} from '@angular/core'; +import {bootstrapApplication} from '@angular/platform-browser'; +import {environment} from '@env/environment'; +import {appConfig} from './app/app.config'; +import {AppComponent} from './app/app.component'; +import {DOCUMENT} from "@angular/common"; +import {stepPreloader} from "@delon/theme"; + +const injector = Injector.create({ + providers: [ + { provide: PLATFORM_ID, useValue: 'browser' }, + { + provide: DOCUMENT, + useFactory: () => { + return document; + } + } + ] +}) as EnvironmentInjector; + +let preloaderDone!: () => void; +runInInjectionContext(injector, () => (preloaderDone = stepPreloader())); +preloaderDone(); + +if (environment.production) { + // console.log('生产模式启动',environment.api) + enableProdMode(); +}else { + // console.log('开发模式启动:',environment.api) +} + + +bootstrapApplication(AppComponent, appConfig) + .then(() => { + const win = window as any; + if (win && win.appBootstrap) { + win.appBootstrap(); + } + }) + .catch((err) => console.error(err)); diff --git a/template-marketplace/hertzbeat-template-hub-web-app/src/styles.css b/template-marketplace/hertzbeat-template-hub-web-app/src/styles.css new file mode 100644 index 00000000000..0578054316c --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/src/styles.css @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +@import './assets/css/style.css'; +@import "ng-zorro-antd/ng-zorro-antd.css"; diff --git a/template-marketplace/hertzbeat-template-hub-web-app/tsconfig.app.json b/template-marketplace/hertzbeat-template-hub-web-app/tsconfig.app.json new file mode 100644 index 00000000000..7d7c716d715 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/tsconfig.json b/template-marketplace/hertzbeat-template-hub-web-app/tsconfig.json new file mode 100644 index 00000000000..4cbe37e33e7 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/tsconfig.json @@ -0,0 +1,43 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "esModuleInterop": true, + "sourceMap": true, + "declaration": false, + "experimentalDecorators": true, + "moduleResolution": "bundler", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "lib": [ + "ES2022", + "dom" + ], + "paths": { + "@shared": [ + "src/app/shared/index" + ], + "@core": [ + "src/app/core/index" + ], + "@env/*": [ + "src/environments/*" + ] + } + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/template-marketplace/hertzbeat-template-hub-web-app/tsconfig.spec.json b/template-marketplace/hertzbeat-template-hub-web-app/tsconfig.spec.json new file mode 100644 index 00000000000..b18619fdfb5 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub-web-app/tsconfig.spec.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/template-marketplace/hertzbeat-template-hub/.gitignore b/template-marketplace/hertzbeat-template-hub/.gitignore new file mode 100644 index 00000000000..549e00a2a96 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/template-marketplace/hertzbeat-template-hub/README.md b/template-marketplace/hertzbeat-template-hub/README.md new file mode 100644 index 00000000000..b1160ee28c6 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/README.md @@ -0,0 +1,2 @@ +## 🛡️ License +[`Apache License, Version 2.0`](https://www.apache.org/licenses/LICENSE-2.0.html) diff --git a/template-marketplace/hertzbeat-template-hub/apiTest/category.http b/template-marketplace/hertzbeat-template-hub/apiTest/category.http new file mode 100644 index 00000000000..b69960fe0bf --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/apiTest/category.http @@ -0,0 +1,38 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. +# + +### add category +POST http://localhost:8080/api/category/upload/test +Content-Type: application/x-www-form-urlencoded + +description=test + +### modify category +POST http://localhost:8080/api/category/modify/1 +Content-Type: application/x-www-form-urlencoded + +name=Database monitoring& +description=数据库监控模版 + +### delete category +DELETE http://localhost:8080/api/category/delete/1 + +### get category by isDel +GET http://localhost:8080/api/category/all/0 + +### get category page by isDel +GET http://localhost:8080/api/category/page/isDel/0?page=0&size=10 \ No newline at end of file diff --git a/template-marketplace/hertzbeat-template-hub/apiTest/share.http b/template-marketplace/hertzbeat-template-hub/apiTest/share.http new file mode 100644 index 00000000000..cced4472d49 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/apiTest/share.http @@ -0,0 +1,22 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. +# + +### share +GET http://localhost:8080/api/share/getShareURL/1 + +### downloadShare +GET http://localhost:8080/api/share/download/6laZF \ No newline at end of file diff --git a/template-marketplace/hertzbeat-template-hub/apiTest/star.http b/template-marketplace/hertzbeat-template-hub/apiTest/star.http new file mode 100644 index 00000000000..b819317d9f4 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/apiTest/star.http @@ -0,0 +1,39 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. +# + +### get starDO templateDO id by user +GET http://localhost:8080/api/starDO/1 + +### assert templateDO is starDO by user +GET http://localhost:8080/api/starDO/isStar/1/1 + +### starDO versionDO +POST http://localhost:8080/api/templateDO/starDO +Content-Type: application/x-www-form-urlencoded + + user=1& + templateDO=3 + +### get starDO templateDO page by user +GET http://localhost:8080/api/starDO/page/user/1?page=0&size=10 + +### cancel starDO +POST http://localhost:8080/api/starDO/cancel/1 +Content-Type: application/x-www-form-urlencoded + + templateId = 1 + diff --git a/template-marketplace/hertzbeat-template-hub/apiTest/template.http b/template-marketplace/hertzbeat-template-hub/apiTest/template.http new file mode 100644 index 00000000000..2246d8887e5 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/apiTest/template.http @@ -0,0 +1,56 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. +# + +### Get Count +GET http://localhost:8080/api/template/count/0/0 +Content-Type: application/json +Authorization: Bearer eyJhbGciOiJIUzUxMiIsInppcCI6IkRFRiJ9.eJwtzM0KwjAQBOB32XMj-Wua9OR7iEjTbCBqm5JtVRDf3VS8Dd8M84brmqAH5by2Y2yZsjYyzWPHnPGBWeetDyM6FwU0QJuv46cnyaU-CqMOY56qJ6LqtBWckYit-YYzIywPLHs7rNCLTjqtjGlVA_ha_qC53KHkO9aH0y9chjClGc6fL9mALgA.59te86AOUF0aAHZG_6pWTw5HM5DqBpk48QeOoZ_XSbINJVIy1lllgnaLOyvrDoKpVyozMMfaIoRWayFQD2SKUg + +### Get templates By user +GET http://localhost:8080/api/template/1 + +### Get templates Page By user +GET http://localhost:8080/api/template/page/user/1?page=0&size=10 + +### Get templates By category +GET http://localhost:8080/api/template/category/1 + +### Get templates Page By category +GET http://localhost:8080/api/template/page/category/1_3/0/1/1?page=0&size=2 + +### Get templates Page +GET http://localhost:8080/api/template/page/0/1?page=0&size=10 + +### Get templates order by order +GET http://localhost:8080/api/template/query/3/0 + +### Get templates Page By option +GET http://localhost:8080/api/template/page/option/My/1_3/0/1/1?page=0&size=10 + +### Get all templates noToken +GET http://localhost:8080/api/template/ + +### Authorization Get all templates +GET http://localhost:8080/api/template/ +Content-Type: application/json +Authorization: Bearer eyJhbGciOiJIUzUxMiIsInppcCI6IkRFRiJ9.eJw1zMEKwjAQBNB_2XMjSbokTU_-h4gk7QpRm0g2VUH8d1PB2_BmmDdcaoQRDIXZeScF4nkQaJwRXgUvUCrrrCI3TB464DW08TOwlhr3yvS7KS_NI3NzXgslYhY1XykJpvKgsrW-wqisdogae9UBve5_MHKDkm_UHg6_cPLzEhMcP1-hvS19.D9WYp53dXBrDd0MphrLhuipHmAbnd5ahuyHQkDkIFO28TRvYqGRGmY5l2vU26WpplVA81QHHl8DMQ9aFxXARAg + +### download +GET http://localhost:8080/api/template/download/1/1/v1.0.0/1 + +### download latest +GET http://localhost:8080/api/template/download/latest/1/1/1 \ No newline at end of file diff --git a/template-marketplace/hertzbeat-template-hub/apiTest/user.http b/template-marketplace/hertzbeat-template-hub/apiTest/user.http new file mode 100644 index 00000000000..d9ed12da7ab --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/apiTest/user.http @@ -0,0 +1,44 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. +# + +### Registy +POST http://localhost:8080/api/auth/register +Content-Type: application/json + +{ + "type": 1, + "identifier": "wbs2024@163.com", + "credential": "123456" +} + +### login+refresh +POST http://localhost:8080/api/auth/login +Content-Type: application/json + +{ + "type": 1, + "identifier": "wbs2024@163.com", + "credential": "123456" +} + +### refresh +POST http://localhost:8080/api/auth/refresh +Content-Type: application/json + +{ + "token": "eyJhbGciOiJIUzUxMiIsInppcCI6IkRFRiJ9.eJwlyk0OwiAQQOG7zLpj-Kd01auATGM1toYBNTHeXRq333sfuNYVJogkvcnBYaCc0Ui3YLRJIUXrZdSjcCLBANxSn1-JlVBmlk6fzvu9-8rcnVuhjZix7jfakKk8qRw1VpikV8Fo7Z0dgN6PP1gzhgMKLYX4AlMtjb4_bgorXA.oYH8rk5Gb984ZcwBL-_N-6NcUk1githHwsKaQFxOewhne708JIsOhh6El3oKXE73gkEr5elASjUnL8zBzsVJ9A" +} \ No newline at end of file diff --git a/template-marketplace/hertzbeat-template-hub/apiTest/version.http b/template-marketplace/hertzbeat-template-hub/apiTest/version.http new file mode 100644 index 00000000000..251d11d6027 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/apiTest/version.http @@ -0,0 +1,25 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. +# + +### Get all versionDO information of a templateDO +GET http://localhost:8080/api/versionDO/versionDO/1 + +### Get all versionDO page of a templateDO +GET http://localhost:8080/api/versionDO/page/1/0?page=0&size=2 + +### Get versionDO information By ID +GET http://localhost:8080/api/versionDO/get/1 \ No newline at end of file diff --git a/template-marketplace/hertzbeat-template-hub/pom.xml b/template-marketplace/hertzbeat-template-hub/pom.xml new file mode 100644 index 00000000000..11c4f9093ff --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/pom.xml @@ -0,0 +1,187 @@ + + + + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.2 + + + org.apache.hertzbeat.templatehub + hertzbeat-template-hub + 0.0.1-SNAPSHOT + hertzbeat-template-hub + hertzbeat-template-hub + + + + + + + + + + + + + + + 17 + UTF-8 + UTF-8 + 3.3.2 + 1.2.23 + 8.3.0 + 3.5.7 + 3.5.7 + 8.4.3 + 3.14.0 + 1.1.0 + + + + + org.springframework.boot + spring-boot-starter-web + + + + + com.mysql + mysql-connector-j + + + + com.alibaba + druid-spring-boot-starter + 1.2.23 + + + org.slf4j + slf4j-api + + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + io.swagger.core.v3 + swagger-annotations + 2.2.22 + + + + org.apache.commons + commons-lang3 + + + + org.springframework.boot + spring-boot-starter-test + ${spring-boot.version} + test + + + org.junit.vintage + junit-vintage-engine + + + + + + org.projectlombok + lombok + + + + io.minio + minio + 8.5.11 + + + + com.squareup.okhttp3 + okhttp + 4.12.0 + + + + org.junit.platform + junit-platform-launcher + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.vintage + junit-vintage-engine + test + + + + org.mockito + mockito-core + test + + + + org.springframework.boot + spring-boot-starter-validation + + + + + + + + + + com.usthe.sureness + spring-boot3-starter-sureness + 1.1.0 + + + + javax.servlet + javax.servlet-api + 3.1.0 + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/template-marketplace/hertzbeat-template-hub/sql/auth_resource.sql b/template-marketplace/hertzbeat-template-hub/sql/auth_resource.sql new file mode 100644 index 00000000000..05b27503c04 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/sql/auth_resource.sql @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +create table auth_resource +( + id bigint auto_increment + primary key, + name varchar(100) not null, + code varchar(100) not null, + method varchar(255) not null, + status int null, + type varchar(255) null, + uri varchar(255) not null, + description varchar(255) null, + gmt_create datetime(6) null, + gmt_update datetime(6) null, + check ((`status` >= 0) and (`status` <= 9)) +); + +INSERT INTO hertzbeat_template_hub.auth_resource (id, name, code, method, status, type, uri, description, gmt_create, gmt_update) VALUES (1, 'test', 'test', 'GET', 1, 'template', '/**/*', null, null, null); +INSERT INTO hertzbeat_template_hub.auth_resource (id, name, code, method, status, type, uri, description, gmt_create, gmt_update) VALUES (2, 'post', 'post', 'POST', 1, 'post', '/**/*', null, null, null); +INSERT INTO hertzbeat_template_hub.auth_resource (id, name, code, method, status, type, uri, description, gmt_create, gmt_update) VALUES (3, 'auth', 'auth', 'POST', 9, 'auth', '/api/auth/**', null, null, null); +INSERT INTO hertzbeat_template_hub.auth_resource (id, name, code, method, status, type, uri, description, gmt_create, gmt_update) VALUES (4, 'get-template', 'get-template', 'GET', 9, 'template-get', '/api/template/**', null, null, null); +INSERT INTO hertzbeat_template_hub.auth_resource (id, name, code, method, status, type, uri, description, gmt_create, gmt_update) VALUES (5, 'get-category', 'get-category', 'GET', 9, 'category-get', '/api/category/**', null, null, null); +INSERT INTO hertzbeat_template_hub.auth_resource (id, name, code, method, status, type, uri, description, gmt_create, gmt_update) VALUES (6, 'get-version', 'get-version', 'GET', 9, 'version-get', '/api/version/**', null, null, null); +INSERT INTO hertzbeat_template_hub.auth_resource (id, name, code, method, status, type, uri, description, gmt_create, gmt_update) VALUES (7, 'get-share', 'get-share', 'GET', 9, 'share-get', '/api/share/**', null, null, null); +INSERT INTO hertzbeat_template_hub.auth_resource (id, name, code, method, status, type, uri, description, gmt_create, gmt_update) VALUES (8, 'post-local', 'post-local', 'POST', 9, 'local', '/api/template/localFileUpload', null, null, null); +INSERT INTO hertzbeat_template_hub.auth_resource (id, name, code, method, status, type, uri, description, gmt_create, gmt_update) VALUES (9, 'get-star', 'get-star', 'GET', 9, 'star', '/api/star/isStar/**', null, null, null); diff --git a/template-marketplace/hertzbeat-template-hub/sql/auth_role.sql b/template-marketplace/hertzbeat-template-hub/sql/auth_role.sql new file mode 100644 index 00000000000..3e8319489dd --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/sql/auth_role.sql @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +create table auth_role +( + id bigint auto_increment + primary key, + code varchar(100) not null, + description varchar(255) null, + gmt_create datetime(6) null, + gmt_update datetime(6) null, + name varchar(100) not null, + status int null, + check ((`status` >= 0) and (`status` <= 9)) +); + +INSERT INTO hertzbeat_template_hub.auth_role (id, code, description, gmt_create, gmt_update, name, status) VALUES (1, 'role_admin', null, null, null, 'admin role', 1); +INSERT INTO hertzbeat_template_hub.auth_role (id, code, description, gmt_create, gmt_update, name, status) VALUES (2, 'role_user', null, null, null, 'user role', 1); diff --git a/template-marketplace/hertzbeat-template-hub/sql/auth_role_resource_bind.sql b/template-marketplace/hertzbeat-template-hub/sql/auth_role_resource_bind.sql new file mode 100644 index 00000000000..9c6f7013abf --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/sql/auth_role_resource_bind.sql @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +create table auth_role_resource_bind +( + id bigint auto_increment + primary key, + gmt_create datetime(6) null, + gmt_update datetime(6) null, + resource_id bigint not null, + role_id bigint not null +); + +INSERT INTO hertzbeat_template_hub.auth_role_resource_bind (id, gmt_create, gmt_update, resource_id, role_id) VALUES (1, null, null, 1, 2); +INSERT INTO hertzbeat_template_hub.auth_role_resource_bind (id, gmt_create, gmt_update, resource_id, role_id) VALUES (2, null, null, 2, 2); diff --git a/template-marketplace/hertzbeat-template-hub/sql/auth_user.sql b/template-marketplace/hertzbeat-template-hub/sql/auth_user.sql new file mode 100644 index 00000000000..4a191ed0ddd --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/sql/auth_user.sql @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +create table auth_user +( + id bigint auto_increment + primary key, + name varchar(255) not null comment '用户名,允许重复,允许修改', + email varchar(255) not null comment '邮箱,允许修改,用于用户登录', + create_time varchar(255) not null comment '注册时间', + log_off_time varchar(255) not null comment '注销时间,未注销为0,注销为时间', + avatar varchar(255) null, + password varchar(100) not null, + salt varchar(255) null, + status int null, + update_time varchar(255) not null, + check ((`status` >= 0) and (`status` <= 4)) +); + +INSERT INTO hertzbeat_template_hub.auth_user (id, name, email, create_time, log_off_time, avatar, password, salt, status, update_time) VALUES (1, 'user', 'wang_bs@163.com', '2024-10-19 21:56:14', '0', null, '251BCA22DFFC1469D001144E680E27BB', 'j6rchp', 1, '2024-10-19 21:56:14'); +INSERT INTO hertzbeat_template_hub.auth_user (id, name, email, create_time, log_off_time, avatar, password, salt, status, update_time) VALUES (2, 'wbs2024@163.com', 'wbs2024@163.com', '2024-10-19 21:56:14', '0', null, '251BCA22DFFC1469D001144E680E27BB', 'j6rchp', 1, '2024-10-19 21:56:14'); +INSERT INTO hertzbeat_template_hub.auth_user (id, name, email, create_time, log_off_time, avatar, password, salt, status, update_time) VALUES (3, 'wang_bs2025@163.com', 'wang_bs2025@163.com', '2024-10-28 20:55:28', '0', null, '8890D5B40B55EEA106F70EE1444FDBE3', 'qkz6zl', 1, '2024-10-28 20:55:28'); +INSERT INTO hertzbeat_template_hub.auth_user (id, name, email, create_time, log_off_time, avatar, password, salt, status, update_time) VALUES (4, 'wang_bs2026@163.com', 'wang_bs2026@163.com', '2024-10-28 20:58:02', '0', null, 'A6E3522FAAEC63443D9D74897C1CF57A', 'mkokmc', 1, '2024-10-28 20:58:02'); +INSERT INTO hertzbeat_template_hub.auth_user (id, name, email, create_time, log_off_time, avatar, password, salt, status, update_time) VALUES (5, 'wang_bs2027@163.com', 'wang_bs2027@163.com', '2024-10-28 20:59:18', '0', null, '9CB428E52EFB187333C6EE278E294310', 'svzdjg', 1, '2024-10-28 20:59:18'); +INSERT INTO hertzbeat_template_hub.auth_user (id, name, email, create_time, log_off_time, avatar, password, salt, status, update_time) VALUES (6, 'wang_bs2028@163.com', 'wang_bs2028@163.com', '2024-10-28 21:00:01', '0', null, '75DA0A713E957714FA17331A7A0C3514', 'mfp2bq', 1, '2024-10-28 21:00:01'); +INSERT INTO hertzbeat_template_hub.auth_user (id, name, email, create_time, log_off_time, avatar, password, salt, status, update_time) VALUES (7, 'user', 'wang_bs2029@163.com', '2024-10-28 21:22:07', '0', null, '89DE72E193A941E88A2220E59DE94EA7', 's9iepv', 1, '2024-10-28 21:22:07'); +INSERT INTO hertzbeat_template_hub.auth_user (id, name, email, create_time, log_off_time, avatar, password, salt, status, update_time) VALUES (8, 'user', 'wang_bs8@163.com', '2024-10-28 21:28:13', '0', null, 'B5F8BF9F0D7BBA4669CE9D2C28F9BC9F', 'fqcw90', 1, '2024-10-28 21:28:13'); diff --git a/template-marketplace/hertzbeat-template-hub/sql/auth_user_role_bind.sql b/template-marketplace/hertzbeat-template-hub/sql/auth_user_role_bind.sql new file mode 100644 index 00000000000..1fa12e96ac8 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/sql/auth_user_role_bind.sql @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +create table auth_user_role_bind +( + id bigint auto_increment + primary key, + gmt_create datetime(6) null, + gmt_update datetime(6) null, + role_id bigint not null, + user_id bigint not null +); + +INSERT INTO hertzbeat_template_hub.auth_user_role_bind (id, gmt_create, gmt_update, role_id, user_id) VALUES (1, null, null, 2, 1); +INSERT INTO hertzbeat_template_hub.auth_user_role_bind (id, gmt_create, gmt_update, role_id, user_id) VALUES (2, null, null, 2, 2); +INSERT INTO hertzbeat_template_hub.auth_user_role_bind (id, gmt_create, gmt_update, role_id, user_id) VALUES (3, null, null, 2, 3); +INSERT INTO hertzbeat_template_hub.auth_user_role_bind (id, gmt_create, gmt_update, role_id, user_id) VALUES (4, null, null, 2, 4); +INSERT INTO hertzbeat_template_hub.auth_user_role_bind (id, gmt_create, gmt_update, role_id, user_id) VALUES (5, null, null, 2, 5); +INSERT INTO hertzbeat_template_hub.auth_user_role_bind (id, gmt_create, gmt_update, role_id, user_id) VALUES (6, null, null, 2, 6); +INSERT INTO hertzbeat_template_hub.auth_user_role_bind (id, gmt_create, gmt_update, role_id, user_id) VALUES (7, null, null, 2, 7); +INSERT INTO hertzbeat_template_hub.auth_user_role_bind (id, gmt_create, gmt_update, role_id, user_id) VALUES (8, null, null, 2, 8); diff --git a/template-marketplace/hertzbeat-template-hub/sql/category.sql b/template-marketplace/hertzbeat-template-hub/sql/category.sql new file mode 100644 index 00000000000..e7b17700ddf --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/sql/category.sql @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +create table category +( + id int auto_increment comment '类别id' + primary key, + name varchar(255) not null comment '类别名', + description varchar(255) not null comment '描述', + create_time varchar(255) not null, + update_time varchar(255) not null comment '更新时间', + is_del int not null comment '删除标记' +); + +INSERT INTO hertzbeat_template_hub.category (id, name, description, create_time, update_time, is_del) VALUES (1, 'Database monitoring', '数据库监控模版', '2024-09-20 16:35:01', '2024-09-20 17:10:24', 0); +INSERT INTO hertzbeat_template_hub.category (id, name, description, create_time, update_time, is_del) VALUES (2, 'Application service monitoring', '应用服务监控模版', '2024-09-20 16:36:59', '2024-09-20 16:36:59', 0); +INSERT INTO hertzbeat_template_hub.category (id, name, description, create_time, update_time, is_del) VALUES (3, 'Operating system monitoring', '操作系统监控模版', '2024-09-20 16:37:51', '2024-09-20 16:37:51', 0); +INSERT INTO hertzbeat_template_hub.category (id, name, description, create_time, update_time, is_del) VALUES (4, 'Middleware monitoring', '中间件监控模版', '2024-09-20 16:38:11', '2024-09-20 16:38:11', 0); +INSERT INTO hertzbeat_template_hub.category (id, name, description, create_time, update_time, is_del) VALUES (5, 'CloudNative monitoring', '云原生监控模版', '2024-09-20 16:38:31', '2024-09-20 16:38:31', 0); +INSERT INTO hertzbeat_template_hub.category (id, name, description, create_time, update_time, is_del) VALUES (6, 'Network monitoring', '网络监控模版', '2024-09-20 16:38:54', '2024-09-20 16:38:54', 0); diff --git a/template-marketplace/hertzbeat-template-hub/sql/star.sql b/template-marketplace/hertzbeat-template-hub/sql/star.sql new file mode 100644 index 00000000000..6b9cab5c345 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/sql/star.sql @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +create table star +( + id int auto_increment comment '收藏id' + primary key, + user_id int not null comment '用户id', + template_id int not null comment '模版id', + create_time varchar(255) not null, + is_del int not null comment '取消标记,0为正常,1为取消' +); diff --git a/template-marketplace/hertzbeat-template-hub/sql/tag.sql b/template-marketplace/hertzbeat-template-hub/sql/tag.sql new file mode 100644 index 00000000000..1b5cec572eb --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/sql/tag.sql @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +create table tag +( + id int not null comment 'tagid' + primary key, + name varchar(255) not null comment 'tag名,不允许重复,允许修改', + description varchar(255) not null comment '描述', + create_time varchar(255) not null comment '创建时间', + is_del int not null comment '删除标记' +); + diff --git a/template-marketplace/hertzbeat-template-hub/sql/template.sql b/template-marketplace/hertzbeat-template-hub/sql/template.sql new file mode 100644 index 00000000000..feac47eb617 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/sql/template.sql @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +create table template +( + id int auto_increment + primary key, + name varchar(255) not null comment '模版名,不允许修改,不同用户间可以重复', + description varchar(255) not null comment '模版描述', + latest int not null comment '最终版本id', + user int not null comment '用户id', + category_id int not null comment '模版类别id', + tag int not null comment '模版-tag表id,这个字段废弃,查询tag时直接去关联表中查询即可', + download int not null comment '下载量', + create_time varchar(255) not null comment '创建时间', + update_time varchar(255) not null comment '更新时间', + off_shelf int not null comment '下架标记,0为正常,1为下架', + is_del int not null comment '删除标记,0为正常,1为删除', + star int not null +); + +create index name_user_idx + on template (name, user) + comment '模版名+用户id的联合索引'; + +create index user_idx + on template (user); + +create index user_isDel_idx + on template (user, is_del); diff --git a/template-marketplace/hertzbeat-template-hub/sql/template_tag.sql b/template-marketplace/hertzbeat-template-hub/sql/template_tag.sql new file mode 100644 index 00000000000..9fcdf1b4c58 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/sql/template_tag.sql @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +create table template_tag +( + id int not null comment 'template-tag id' + primary key, + template int not null comment 'template id', + tag int not null comment 'tag id' +); + diff --git a/template-marketplace/hertzbeat-template-hub/sql/version.sql b/template-marketplace/hertzbeat-template-hub/sql/version.sql new file mode 100644 index 00000000000..f664c312b4d --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/sql/version.sql @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +create table version +( + id int auto_increment comment '版本id' + primary key, + template_id int not null comment '模版id', + version varchar(255) not null comment '版本号,不允许修改', + description varchar(255) not null comment '版本描述,todo:扩展为markdown文件地址', + download int not null comment '下载量', + create_time varchar(255) not null comment '创建时间', + off_shelf int not null comment '是否下架', + is_del int not null comment '是否删除', + star int not null +) + comment '版本表存放存储于minio中的object关键字信息,用用户名+template_id+版本号拼接,如果用户名允许修改或重复,则用用户id拼接'; + +create index template_isDel_idx + on version (template_id, is_del); + +create index template_version_idx + on version (template_id, version) + comment '通过该索引能够确定唯一数据'; \ No newline at end of file diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/HertzbeatTemplateHubApplication.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/HertzbeatTemplateHubApplication.java new file mode 100644 index 00000000000..f57f0a5c03d --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/HertzbeatTemplateHubApplication.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +@SpringBootApplication +@EnableTransactionManagement +public class HertzbeatTemplateHubApplication { + + public static void main(String[] args) { + SpringApplication.run(HertzbeatTemplateHubApplication.class, args); + } + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/config/FileStorageConfig.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/config/FileStorageConfig.java new file mode 100644 index 00000000000..0a10a8b9329 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/config/FileStorageConfig.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.config; + +import org.apache.hertzbeat.templatehub.service.FileStorageService; +import org.apache.hertzbeat.templatehub.service.impl.LocalFileStorageServiceImpl; +import org.apache.hertzbeat.templatehub.service.impl.MinIOFileStorageServiceImpl; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class FileStorageConfig { + + @Value("${file.storage.type}") + private String storageType; + + @Value("${minio.endpoint}") + private String minioEndpoint; + + @Value("${minio.accessKey}") + private String accessKey; + + @Value("${minio.secretKey}") + private String secretKey; + + @Bean + public FileStorageService fileStorageService() { + if ("minio".equalsIgnoreCase(storageType)) { + return new MinIOFileStorageServiceImpl( + minioEndpoint, + accessKey, + secretKey + ); + } else if ("local".equalsIgnoreCase(storageType)) { + return new LocalFileStorageServiceImpl(); + } else { + throw new IllegalArgumentException("Invalid file storage type: " + storageType); + } + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/constants/CommonConstants.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/constants/CommonConstants.java new file mode 100644 index 00000000000..5c20878d4fd --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/constants/CommonConstants.java @@ -0,0 +1,375 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.constants; + +/** + * Public Common Constant + */ +public interface CommonConstants { + + /** + * Response status code: generic success + */ + byte SUCCESS_CODE = 0x00; + + /** + * Response status code: generic failure + */ + byte FAIL_CODE = 0x0F; + + /** + * Response status code: Incorrect login account password + */ + byte LOGIN_FAILED_CODE = 0x06; + + /** + * Response status code: Parameter verification failed + */ + byte PARAM_INVALID_CODE = 0x01; + + /** + * Response Status Code: Probe Failed + */ + byte DETECT_FAILED_CODE = 0x02; + + /** + * Response status code: monitoring does not exist + */ + byte MONITOR_NOT_EXIST_CODE = 0x03; + + /** + * Response Status Code: Monitor Service Conflict + */ + byte MONITOR_CONFLICT_CODE = 0x04; + + /** + * Response status code: Incorrect login account password + */ + byte MONITOR_LOGIN_FAILED_CODE = 0x05; + + /** + * Monitoring status 0: Paused, 1: Up, 2: Down + */ + byte MONITOR_PAUSED_CODE = 0x00; + + /** + * Monitoring status 0: Paused, 1: Up, 2: Down + */ + byte MONITOR_UP_CODE = 0x01; + + /** + * Monitoring status 0: Paused, 1: Up, 2: Down + */ + byte MONITOR_DOWN_CODE = 0x02; + + /** + * Alarm status: 0 - normal alarm (to be processed) + */ + byte ALERT_STATUS_CODE_PENDING = 0x00; + + /** + * Alarm Status: 1 - Threshold triggered but not reached the number of alarms + */ + byte ALERT_STATUS_CODE_NOT_REACH = 0x01; + + /** + * Alarm Status: 2-Restore Alarm + */ + byte ALERT_STATUS_CODE_RESTORED = 0x02; + + /** + * Alert Status: 3-Handled + */ + byte ALERT_STATUS_CODE_SOLVED = 0x03; + + /** + * Alarm level: 0: high-emergency-emergency-red + */ + byte ALERT_PRIORITY_CODE_EMERGENCY = 0x00; + + /** + * Alarm severity: 1: medium-critical-critical alarm-orange + */ + byte ALERT_PRIORITY_CODE_CRITICAL = 0x01; + + /** + * Warning level: 2: low-warning-warning warning-yellow + */ + byte ALERT_PRIORITY_CODE_WARNING = 0x02; + + /** + * Field parameter type: number + */ + byte TYPE_NUMBER = 0; + + /** + * Field parameter type: String + */ + byte TYPE_STRING = 1; + + /** + * Field parameter type: encrypted string + */ + byte TYPE_SECRET = 2; + + /** + * Field parameter type: time + */ + byte TYPE_TIME = 3; + + /** + * Collection metric value: null placeholder for empty value + */ + String NULL_VALUE = " "; + + /** + * + */ + String PROM_TIME = "timestamp"; + + /** + * + */ + String PROM_VALUE = "value"; + + /** + * Monitor total availability metrics + */ + String AVAILABILITY = "availability"; + + /** + * Parameter Type Number + */ + byte PARAM_TYPE_NUMBER = 0; + + /** + * Parameter Type String + */ + byte PARAM_TYPE_STRING = 1; + + /** + * Parameter Type Password + */ + byte PARAM_TYPE_PASSWORD = 2; + + /** + * Parameter Type Map values + */ + byte PARAM_TYPE_MAP = 3; + + /** + * Parameter Type arrays values + */ + byte PARAM_TYPE_ARRAY = 4; + + /** + * Authentication type Account password + */ + byte AUTH_TYPE_PASSWORD = 1; + + /** + * Authentication type GitHub three-party login + */ + byte AUTH_TYPE_GITHUB = 2; + + /** + * Authentication type WeChat three-party login + */ + byte AUTH_TYPE_WEIXIN = 3; + + /** + * Authentication type GITEE three-party login + */ + byte AUTH_TYPE_GITEE = 5; + + /** + * Inside the tag: monitorId Monitor task ID + */ + String TAG_MONITOR_ID = "monitorId"; + + /** + * Inside the tag: monitorName Task name + */ + String TAG_MONITOR_NAME = "monitorName"; + + /** + * Inside the tag: monitorHost Task host + */ + String TAG_MONITOR_HOST = "monitorHost"; + + /** + * Inside the tag: policyId Alarm threshold rule ID + */ + String TAG_THRESHOLD_ID = "thresholdId"; + + /** + * Inside the tag: app Type of monitoring + */ + String TAG_MONITOR_APP = "app"; + + /** + * Inside the tag: metrics + */ + String TAG_METRICS = "metrics"; + + /** + * Inside the tag: metric + */ + String TAG_METRIC = "metric"; + + /** + * Inside the tag: code + */ + String TAG_CODE = "code"; + + /** + * notice_period type Type field, daily type + */ + int NOTICE_PERIOD_DAILY = 0; + + /** + * key is receiver.id, value is noticePeriod cache key prefix + */ + String RECEIVER_NOTICE_PERIOD_CACHE_PREFIX = "receiver_notice_period:"; + + /** + * cache key notice_rule + */ + String CACHE_NOTICE_RULE = "notice_rule"; + + /** + * cache key alert silence + */ + String CACHE_ALERT_SILENCE = "alert_silence"; + + /** + * cache key alert converge + */ + String CACHE_ALERT_CONVERGE = "alert_converge"; + + /** + * collector status online 0 + */ + byte COLLECTOR_STATUS_ONLINE = 0; + + /** + * collector status offline 1 + */ + byte COLLECTOR_STATUS_OFFLINE = 1; + + /** + * default main collector name + */ + String MAIN_COLLECTOR_NODE = "main-default-collector"; + + /** + * locale spilt + */ + String LOCALE_SEPARATOR = "_"; + + /** + * ignore label + * Handle situations where recovery alarms are not configured, but need to be used to change task state + */ + String IGNORE = "ignore"; + + /** + * collector mode public + */ + String MODE_PUBLIC = "public"; + + /** + * collector mode private + */ + String MODE_PRIVATE = "private"; + + /** + * collector auth failed message + */ + String COLLECTOR_AUTH_FAILED = "Auth Failed"; + + /** + * for prometheus task name prefix + */ + String PROMETHEUS_APP_PREFIX = "_prometheus_"; + + /** + * prometheus + */ + String PROMETHEUS = "prometheus"; + + /** + * status page component state normal + */ + byte STATUS_PAGE_COMPONENT_STATE_NORMAL = 0; + + /** + * status page component state abnormal + */ + byte STATUS_PAGE_COMPONENT_STATE_ABNORMAL = 1; + + /** + * status page component state unknown + */ + byte STATUS_PAGE_COMPONENT_STATE_UNKNOWN = 2; + + /** + * status page org state all normal + */ + byte STATUS_PAGE_ORG_STATE_ALL_NORMAL = 0; + + /** + * status page org state some abnormal + */ + byte STATUS_PAGE_ORG_STATE_SOME_ABNORMAL = 1; + + /** + * status page org state all abnormal + */ + byte STATUS_PAGE_ORG_STATE_ALL_ABNORMAL = 2; + + /** + * status page component calculate method auto + */ + byte STATUE_PAGE_CALCULATE_METHOD_AUTO = 0; + + /** + * status page component calculate method manual + */ + byte STATUS_PAGE_CALCULATE_METHOD_MANUAL = 1; + + /** + * status page incident state investigating + */ + byte STATUS_PAGE_INCIDENT_STATE_INVESTIGATING = 0; + + /** + * status page incident state identified + */ + byte STATUS_PAGE_INCIDENT_STATE_IDENTIFIED = 1; + + /** + * status page incident state monitoring + */ + byte STATUS_PAGE_INCIDENT_STATE_MONITORING = 2; + + /** + * status page incident state resolved + */ + byte STATUS_PAGE_INCIDENT_STATE_RESOLVED = 3; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/AccountController.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/AccountController.java new file mode 100644 index 00000000000..51aa3dd0580 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/AccountController.java @@ -0,0 +1,134 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import com.usthe.sureness.util.JsonWebTokenUtil; +import io.jsonwebtoken.ExpiredJwtException; +import io.swagger.v3.oas.annotations.Operation; +import jakarta.transaction.Transactional; +import jakarta.validation.Valid; +import lombok.extern.slf4j.Slf4j; +import org.apache.hertzbeat.templatehub.exception.HertzbeatTemplateHubException; +import org.apache.hertzbeat.templatehub.model.DTO.*; +import org.apache.hertzbeat.templatehub.service.AccountService; +import org.apache.hertzbeat.templatehub.service.RoleService; +import org.apache.hertzbeat.templatehub.util.ResponseUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.naming.AuthenticationException; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import static org.apache.hertzbeat.templatehub.constants.CommonConstants.FAIL_CODE; +import static org.apache.hertzbeat.templatehub.constants.CommonConstants.LOGIN_FAILED_CODE; + +@RestController +@CrossOrigin(maxAge = 3600,origins = "*") +@RequestMapping("/auth") +@Slf4j +public class AccountController { + + @Autowired + private AccountService accountService; + + @Autowired + private RoleService roleService; + + private static final String TOKEN_SPLIT = "--"; + + @PostMapping("/login") + @Operation(summary = "Account password login to obtain associated user information", description = "Account password login to obtain associated user information") + public ResponseEntity>> authGetToken(@Valid @RequestBody LoginDto loginDto) { + return ResponseUtil.handle(() -> accountService.authGetToken(loginDto)); + } + + @PostMapping("/refresh") + @Operation(summary = "Use refresh TOKEN to re-acquire TOKEN", description = "Use refresh TOKEN to re-acquire TOKEN") + public ResponseEntity> refreshToken(@Valid @RequestBody TokenDto tokenDto) { + try { + return ResponseEntity.ok(Message.success(accountService.refreshToken(tokenDto.getToken()))); + } catch (AuthenticationException e) { + return ResponseEntity.ok(Message.fail(LOGIN_FAILED_CODE, e.getMessage())); + } catch (ExpiredJwtException expiredJwtException) { + log.warn("{}", expiredJwtException.getMessage()); + return ResponseEntity.ok(Message.fail(LOGIN_FAILED_CODE, "Refresh Token Expired")); + } catch (Exception e) { + log.error("Exception occurred during token refresh: {}", e.getClass().getName(), e); + return ResponseEntity.ok(Message.fail(LOGIN_FAILED_CODE, "Refresh Token Error")); + } + } + + @Deprecated + @PostMapping("/token") + public ResponseEntity>> issueJwtToken(@RequestBody @Validated LoginDto account) { + boolean authenticatedFlag = accountService.authenticateAccount(account); + if (!authenticatedFlag) { + Message> message = Message.fail(FAIL_CODE,"username or password not incorrect"); + return ResponseEntity.status(HttpStatus.FORBIDDEN).body(message); + } + List ownRole = accountService.loadAccountRoles(account.getIdentifier()); + String jwt = JsonWebTokenUtil.issueJwt(UUID.randomUUID().toString(), account.getIdentifier(), + "tom-auth-server", 3600L, ownRole); + Message> message = Message.success(Collections.singletonMap("token", jwt)); + return ResponseEntity.ok(message); + } + + @Deprecated + @PostMapping("/custom/token") + public ResponseEntity>> issueCustomToken(@RequestBody @Validated LoginDto account) { + boolean authenticatedFlag = accountService.authenticateAccount(account); + if (!authenticatedFlag) { + Message> message = Message.fail(FAIL_CODE,"username or password not incorrect"); + return ResponseEntity.status(HttpStatus.FORBIDDEN).body(message); + } + long refreshPeriodTime = 36000L; + String token = account.getIdentifier() + TOKEN_SPLIT + System.currentTimeMillis() + + TOKEN_SPLIT + refreshPeriodTime + + TOKEN_SPLIT + UUID.randomUUID().toString().replace("-", ""); + TokenStorage.addToken(account.getIdentifier(), token); + Map responseData = Collections.singletonMap("customToken", token); + Message> message = Message.success(responseData); + return ResponseEntity.status(HttpStatus.CREATED).body(message); + } + + @PostMapping("/register") + @Transactional + public ResponseEntity> accountRegister(@RequestBody @Validated SignUpDto account) { + //此处先让前端传递明文密码,后续改为加密密码 + + if (accountService.registerAccount(account)) { + Long authUser = roleService.getRoleIdByCode("role_user"); + if(authUser == null) throw new HertzbeatTemplateHubException("Role query error"); + boolean b = accountService.authorityUserRole(account.getEmail(), authUser); + if(!b) throw new HertzbeatTemplateHubException("Role authority error"); + Message message=Message.success("Sign up success, login after"); + if (log.isDebugEnabled()) { + log.debug("account: {}, sign up success", account); + } + return ResponseEntity.ok(message); + } else { + return ResponseEntity.ok(Message.fail(FAIL_CODE,"Email already exist")); + } + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/CategoryController.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/CategoryController.java new file mode 100644 index 00000000000..059e0fd1d54 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/CategoryController.java @@ -0,0 +1,119 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import org.apache.hertzbeat.templatehub.model.DO.CategoryDO; +import org.apache.hertzbeat.templatehub.model.DTO.Message; +import org.springframework.data.domain.Page; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.apache.hertzbeat.templatehub.service.CategoryService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; + +import static org.apache.hertzbeat.templatehub.constants.CommonConstants.FAIL_CODE; + +@Slf4j +@RestController +@CrossOrigin(origins = "*") +@RequestMapping("category") +public class CategoryController { + + @Autowired + private CategoryService categoryService; + + @PostMapping("/upload/{name}") + public ResponseEntity> addCategory(@PathVariable("name") String name, + @RequestParam("description") String description) { + + if (name.isEmpty() || description.isEmpty()) { + return ResponseEntity.ok(Message.fail(FAIL_CODE,"params error")); + } + + String nowTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + + boolean isOK = categoryService.addCategory(name, description, nowTime); + + if(!isOK){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"add category failed")); + } + return ResponseEntity.ok(Message.success("add category success")); + } + + @PostMapping("/modify/{id}") + public ResponseEntity> modifyCategory(@PathVariable("id") int id, + @RequestParam("name") String name, + @RequestParam("description") String description) { + + if (id<=0 || name.isEmpty() || description.isEmpty()) { + return ResponseEntity.ok(Message.fail(FAIL_CODE,"params error")); + } + + String nowTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + + boolean isOK = categoryService.modifyCategory(id, name, description, nowTime); + + if(!isOK){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"modify category failed")); + } + return ResponseEntity.ok(Message.success("modify category success")); + } + + @DeleteMapping("/delete/{id}") + public ResponseEntity> deleteCategory(@PathVariable("id") int id) { + + if (id<=0) { + return ResponseEntity.ok(Message.fail(FAIL_CODE,"empty id")); + } + + boolean isOK = categoryService.deleteCategory(id); + + if(!isOK){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"category is used")); + } + return ResponseEntity.ok(Message.success("delete category success")); + } + + @GetMapping("/all/{isDel}") + public ResponseEntity>> getAllCategory(@PathVariable("isDel") int isDel) { + + if (isDel!=0&&isDel!=1) { + return ResponseEntity.ok(Message.fail(FAIL_CODE,"error option")); + } + + List allCategoryDOByIsDel = categoryService.getAllCategoryByIsDel(isDel); + + return ResponseEntity.ok(Message.success(allCategoryDOByIsDel)); + } + + @GetMapping("/page/isDel/{isDel}") + public ResponseEntity>> getCategoryPageByIsDel(@PathVariable("isDel") int isDel, @RequestParam int page, @RequestParam int size) { + + if (isDel!=0&&isDel!=1||page<0||size<0) { + return ResponseEntity.ok(Message.fail(FAIL_CODE,"Params Error")); + } + + Page allCategoryByIsDel = categoryService.getPageByIsDel(isDel, page, size); + + return ResponseEntity.ok(Message.success(allCategoryByIsDel)); + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/ResourceController.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/ResourceController.java new file mode 100644 index 00000000000..f372597924f --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/ResourceController.java @@ -0,0 +1,109 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import jakarta.validation.constraints.NotBlank; +import lombok.extern.slf4j.Slf4j; +import org.apache.hertzbeat.templatehub.model.DTO.Message; +import org.apache.hertzbeat.templatehub.model.DO.AuthResourceDO; +import org.apache.hertzbeat.templatehub.service.ResourceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +/** + * @author tomsun28 + * @date 00:24 2019-08-01 + */ +@RequestMapping("/resource") +@RestController +@Slf4j +public class ResourceController { + + @Autowired + private ResourceService resourceService; + + @PostMapping + public ResponseEntity addResource(@RequestBody @Validated AuthResourceDO authResource) { + if (resourceService.addResource(authResource)) { + if (log.isDebugEnabled()) { + log.debug("add resource success: {}", authResource); + } + return ResponseEntity.status(HttpStatus.CREATED).build(); + } else { + Message message = Message.builder().msg("resource already exist").build(); + return ResponseEntity.status(HttpStatus.CONFLICT).body(message); + } + } + + @PutMapping + public ResponseEntity updateResource(@RequestBody @Validated AuthResourceDO authResource) { + if (resourceService.updateResource(authResource)) { + if (log.isDebugEnabled()) { + log.debug("update resource success: {}", authResource); + } + return ResponseEntity.ok().build(); + } else { + Message message = Message.builder().msg("resource not exist").build(); + return ResponseEntity.status(HttpStatus.CONFLICT).body(message); + } + } + + @DeleteMapping("/{resourceId}") + public ResponseEntity deleteResource(@PathVariable @NotBlank Long resourceId ) { + if (resourceService.deleteResource(resourceId)) { + if (log.isDebugEnabled()) { + log.debug("delete resource success: {}", resourceId); + } + return ResponseEntity.ok().build(); + } else { + Message message = Message.builder().msg("delete resource fail, please try again later").build(); + log.error("delete resource fail: {}", resourceId); + return ResponseEntity.status(HttpStatus.TOO_MANY_REQUESTS).body(message); + } + } + + @GetMapping("/{currentPage}/{pageSize}") + public ResponseEntity getResource(@PathVariable Integer currentPage, @PathVariable Integer pageSize ) { + if (Objects.isNull(currentPage) || Objects.isNull(pageSize)) { + // no pageable + Optional> resourceListOptional = resourceService.getAllResource(); + if (resourceListOptional.isPresent()) { + Message message = Message.builder().data(resourceListOptional.get()).build(); + return ResponseEntity.ok().body(message); + } else { + Message message = Message.builder().data(new ArrayList<>(0)).build(); + return ResponseEntity.ok().body(message); + } + } else { + // pageable + Page resourcePage = resourceService.getPageResource(currentPage, pageSize); + Message message = Message.builder().data(resourcePage.get()).build(); + return ResponseEntity.ok().body(message); + } + } + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/RoleController.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/RoleController.java new file mode 100644 index 00000000000..1c90ee27486 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/RoleController.java @@ -0,0 +1,154 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import jakarta.validation.constraints.NotBlank; +import lombok.extern.slf4j.Slf4j; +import org.apache.hertzbeat.templatehub.model.DTO.Message; +import org.apache.hertzbeat.templatehub.model.DO.AuthResourceDO; +import org.apache.hertzbeat.templatehub.model.DO.AuthRoleDO; +import org.apache.hertzbeat.templatehub.service.RoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +/** + * @author tomsun28 + * @date 00:24 2019-08-01 + */ +@RestController +@RequestMapping("/role") +@Slf4j +public class RoleController { + + @Autowired + private RoleService roleService; + + + @GetMapping("/resource/{roleId}/{currentPage}/{pageSize}") + public ResponseEntity getResourceOwnByRole(@PathVariable @NotBlank Long roleId, @PathVariable Integer currentPage, @PathVariable Integer pageSize) { + if (currentPage == null){ + currentPage = 1; + } + if (pageSize == null) { + pageSize = 10; + } + Page resourcePage = roleService.getPageResourceOwnRole(roleId, currentPage, pageSize); + Message message = Message.builder().data(resourcePage).build(); + return ResponseEntity.ok().body(message); + } + + @GetMapping("/resource/-/{roleId}/{currentPage}/{pageSize}") + public ResponseEntity getResourceNotOwnByRole(@PathVariable @NotBlank Long roleId, @PathVariable Integer currentPage, @PathVariable Integer pageSize) { + if (currentPage == null){ + currentPage = 1; + } + if (pageSize == null) { + pageSize = 10; + } + Page resourcePage = roleService.getPageResourceNotOwnRole(roleId, currentPage, pageSize); + Message message = Message.builder().data(resourcePage).build(); + return ResponseEntity.ok().body(message); + } + + @PostMapping("/authority/resource/{roleId}/{resourceId}") + public ResponseEntity authorityRoleResource(@PathVariable @NotBlank Long roleId, + @PathVariable @NotBlank Long resourceId) { + roleService.authorityRoleResource(roleId,resourceId); + return ResponseEntity.status(HttpStatus.OK).build(); + } + + @DeleteMapping("/authority/resource/{roleId}/{resourceId}") + public ResponseEntity deleteAuthorityRoleResource(@PathVariable @NotBlank Long roleId, + @PathVariable @NotBlank Long resourceId) { + roleService.deleteAuthorityRoleResource(roleId,resourceId); + return ResponseEntity.status(HttpStatus.OK).build(); + } + + @PostMapping + public ResponseEntity addRole(@RequestBody @Validated AuthRoleDO authRole) { + if (roleService.addRole(authRole)) { + if (log.isDebugEnabled()) { + log.debug("add role success: {}", authRole); + } + return ResponseEntity.status(HttpStatus.CREATED).build(); + } else { + Message message = Message.builder() + .msg("role already exist").build(); + return ResponseEntity.status(HttpStatus.CONFLICT).body(message); + } + } + + @PutMapping + public ResponseEntity updateRole(@RequestBody @Validated AuthRoleDO authRole) { + if (roleService.updateRole(authRole)) { + if (log.isDebugEnabled()) { + log.debug("update role success: {}", authRole); + } + return ResponseEntity.ok().build(); + } else { + Message message = Message.builder() + .msg("role not exist").build(); + return ResponseEntity.status(HttpStatus.CONFLICT).body(message); + } + } + + @DeleteMapping("/{roleId}") + public ResponseEntity deleteRole(@PathVariable @NotBlank Long roleId) { + if (roleService.deleteRole(roleId)) { + if (log.isDebugEnabled()) { + log.debug("delete role success: {}", roleId); + } + return ResponseEntity.ok().build(); + } else { + Message message = Message.builder() + .msg("delete role fail, no this role here").build(); + log.debug("delete role fail: {}", roleId); + return ResponseEntity.status(HttpStatus.CONFLICT).body(message); + } + } + + @GetMapping("/{currentPage}/{pageSize}") + public ResponseEntity getRole(@PathVariable Integer currentPage, @PathVariable Integer pageSize ) { + if (Objects.isNull(currentPage) || Objects.isNull(pageSize)) { + // no pageable + Optional> roleListOptional = roleService.getAllRole(); + if (roleListOptional.isPresent()) { + Message message = Message.builder().data(roleListOptional.get()).build(); + return ResponseEntity.ok().body(message); + } else { + Message message = Message.builder().data(new ArrayList<>()).build(); + return ResponseEntity.ok().body(message); + } + } else { + // pageable + Page rolePage = roleService.getPageRole(currentPage, pageSize); + Message message = Message.builder().data(rolePage).build(); + return ResponseEntity.ok().body(message); + } + } + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/ShareController.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/ShareController.java new file mode 100644 index 00000000000..c32d0df1ad0 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/ShareController.java @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import lombok.extern.slf4j.Slf4j; +import org.apache.hertzbeat.templatehub.model.DO.VersionDO; +import org.apache.hertzbeat.templatehub.model.DTO.Message; +import org.apache.hertzbeat.templatehub.model.DO.TemplateDO; +import org.apache.hertzbeat.templatehub.service.TemplateService; +import org.apache.hertzbeat.templatehub.service.VersionService; +import org.apache.hertzbeat.templatehub.util.Base62Util; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + + +import static org.apache.hertzbeat.templatehub.constants.CommonConstants.FAIL_CODE; + +@Slf4j +@RestController +@RequestMapping("share") +@CrossOrigin(origins = "*") +public class ShareController { + + @Value("${server.address}") + private String serverAddress; + + @Value("${server.port}") + private String serverPort; + + @Value("${server.servlet.context-path}") + private String contextPath; + + @Autowired + TemplateService templateService; + @Autowired + VersionService versionService; + + @GetMapping("/getShareURL/{version}") + public ResponseEntity> getShareURL(@PathVariable("version") long versionId){ + + if(versionId<=0) return ResponseEntity.ok(Message.fail(FAIL_CODE,"params error")); + + VersionDO versionDO = versionService.getVersion((int) versionId); + if(versionDO ==null) return ResponseEntity.ok(Message.fail(FAIL_CODE,"version not found")); + + String base62Key = Base62Util.idToShortKey(versionId+100000000); + + return ResponseEntity.ok(Message.success("http://"+serverAddress+":"+serverPort+contextPath+"/share/download/"+base62Key)); + } + + @GetMapping("/download/{key}") + public ResponseEntity downloadShare(@PathVariable("key") String key){ + + if(!Base62Util.isBase62(key)) return ResponseEntity.notFound().build(); + + long versionId = (int) Base62Util.shortKeyToId(key)-100000000; + + VersionDO versionDO = versionService.getVersion((int) versionId); + + if(versionDO ==null) return ResponseEntity.notFound().build(); + + TemplateDO templateDO = templateService.getTemplate(versionDO.getTemplateId()); + + Resource resource = templateService.downloadTemplate(templateDO.getUser(), templateDO.getId(), versionDO.getVersion(), (int) versionId); + + if(resource!=null) return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, + "attachment; filename=\"" + versionDO.getVersion() + ".yml\"").body(resource); + else return ResponseEntity.notFound().build(); + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/StarController.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/StarController.java new file mode 100644 index 00000000000..687bef16032 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/StarController.java @@ -0,0 +1,113 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import lombok.extern.slf4j.Slf4j; +import org.apache.hertzbeat.templatehub.model.DO.TemplateDO; +import org.apache.hertzbeat.templatehub.model.DTO.Message; +import org.apache.hertzbeat.templatehub.model.VO.TemplateVO; +import org.apache.hertzbeat.templatehub.service.StarService; +import org.apache.hertzbeat.templatehub.service.TemplateService; +import org.apache.hertzbeat.templatehub.service.VersionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import java.util.Collections; +import java.util.List; + +import static org.apache.hertzbeat.templatehub.constants.CommonConstants.FAIL_CODE; + +@Slf4j +@RestController +@CrossOrigin(origins = "*") +@RequestMapping("star") +public class StarController { + + @Autowired + private StarService starService; + + @Autowired + private VersionService versionService; + + @Autowired + private TemplateService templateService; + + @GetMapping("/{user}") + public ResponseEntity>> getAllTemplateIdByUserStar(@PathVariable("user") int userId){ + if(userId<=0) return ResponseEntity.ok(Message.fail(FAIL_CODE,"params error")); + + List templateByUserStar = starService.getTemplateByUserStar(userId, 0); + Collections.sort(templateByUserStar); + return ResponseEntity.ok(Message.success(templateByUserStar)); + } + + @GetMapping("/isStar/{user}/{templateId}") + public ResponseEntity> assertTemplateIdIsStarByUser(@PathVariable("user") int userId, + @PathVariable("templateId") int templateId){ + if(userId<=0||templateId<=0) return ResponseEntity.ok(Message.fail(FAIL_CODE,"params error")); + + Boolean b = starService.assertTemplateIdIsStarByUser(userId, templateId); + + return ResponseEntity.ok(Message.success(b)); + } + + @GetMapping("/page/user/{user}") + public ResponseEntity>> getTemplatePageByUserStar(@PathVariable("user") int userId, + @RequestParam(required = false) Integer page, + @RequestParam(required = false) Integer size){ + if(userId<=0){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"User Error")); + } + + Page res = starService.getPageByUserStar(userId, 0, 0, 0,page,size); + List templateVOList = res.getContent() + .stream() + .map(templateDO -> new TemplateVO(templateDO,true)) + .toList(); + return ResponseEntity.ok(Message.success(new PageImpl<>(templateVOList, PageRequest.of(page,size), res.getTotalElements()))); + } + + @Transactional + @PostMapping("/cancel/{user}") + public ResponseEntity> cancelStar(@PathVariable("user") int userId, @RequestParam("templateId") int templateId){ + if(userId<=0||templateId<=0){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"Params Error")); + } + + boolean b=starService.assertTemplateIdIsStarByUser(userId, templateId); + if(!b){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"Template is not star")); + } + + Boolean isOk = starService.cancelStarByUser(userId, templateId); + if(!isOk){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"cancel Error")); + } + + boolean isOk2 = templateService.cancelStarTemplate(templateId); + if(!isOk2){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"cancel Error")); + } + return ResponseEntity.ok(Message.success("cancel success")); + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TagController.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TagController.java new file mode 100644 index 00000000000..4d815a62dd2 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TagController.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.apache.hertzbeat.templatehub.service.TagService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; + +@Slf4j +@RestController +@CrossOrigin(origins = "*") +@RequestMapping("tag") +public class TagController { + + @Autowired + private TagService tagService; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TemplateController.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TemplateController.java new file mode 100644 index 00000000000..b5f2e7ab447 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TemplateController.java @@ -0,0 +1,409 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.hertzbeat.templatehub.exception.HertzbeatTemplateHubException; +import org.apache.hertzbeat.templatehub.model.DO.TemplateDO; +import org.apache.hertzbeat.templatehub.model.DO.VersionDO; +import org.apache.hertzbeat.templatehub.model.DTO.Message; +import org.apache.hertzbeat.templatehub.model.DTO.TemplateDto; +import org.apache.hertzbeat.templatehub.model.VO.TemplateVO; +import org.apache.hertzbeat.templatehub.service.StarService; +import org.apache.hertzbeat.templatehub.service.VersionService; +import org.jetbrains.annotations.NotNull; +import org.springframework.core.io.Resource; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import org.apache.hertzbeat.templatehub.service.TemplateService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.multipart.MultipartFile; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +import static org.apache.hertzbeat.templatehub.constants.CommonConstants.FAIL_CODE; + +@Slf4j +@RestController +@CrossOrigin(origins = "*",maxAge = 3600) +@RequestMapping("template") +public class TemplateController { + + @Autowired + private TemplateService templateService; + + @Autowired + private VersionService versionService; + + @Autowired + private StarService starService; + + @PostMapping("/localFileUpload") + public ResponseEntity> localFileUpload(@RequestParam("file") MultipartFile file){ + + return ResponseEntity.ok(Message.success("ok")); + } + + @PostMapping("/upload") + public ResponseEntity> uploadTemplate(@ModelAttribute("templateDto") String s, + @RequestParam("file") MultipartFile file){ + if(file.isEmpty()||s==null || s.isEmpty()) return ResponseEntity.ok(Message.fail(FAIL_CODE,"params error")); + + ObjectMapper objectMapper = new ObjectMapper(); + TemplateDto templateDto; + try { + templateDto = objectMapper.readValue(s, TemplateDto.class); + } catch (JsonProcessingException e) { + return ResponseEntity.ok(Message.fail(FAIL_CODE, + "Template description information reading exception"+e.getMessage())); + } + templateDto.setCreate_time(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + templateDto.setUpdate_time(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + + if(templateDto.getUserId()==0||templateDto.getName().isEmpty()||templateDto.getCurrentVersion().isEmpty()){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"params error")); + } + + boolean upload = templateService.upload(templateDto, file); + if(upload) return ResponseEntity.ok(Message.success("upload success")); + return ResponseEntity.ok(Message.fail(FAIL_CODE,"upload fail")); + } + + @GetMapping("/count/{isDel}/{offShelf}") + public ResponseEntity> getCountByIsDelAndOffshelf(@PathVariable("isDel") int isDel, @PathVariable("offShelf") int offshelf){ + if(isDel<0 || offshelf<0 || isDel>1 || offshelf>1) return ResponseEntity.ok(Message.fail(FAIL_CODE,"Params Error")); + + int countByIsDelAndOffShelf = templateService.getCountByIsDelAndOffShelf(isDel, offshelf); + return ResponseEntity.ok(Message.success(countByIsDelAndOffShelf)); + } + + @GetMapping("/page/category/{categoryIdStr}/{isDel}/{orderOption}/{userId}") + public ResponseEntity>> getTemplatePageByCategory(@PathVariable("categoryIdStr") String categoryIdStr, @PathVariable("isDel") int isDel, + @PathVariable("orderOption") int orderOption, @PathVariable("userId") int userId, + @RequestParam int page, @RequestParam int size){ + String[] s = categoryIdStr.split("_"); + List categoryIdList=new ArrayList<>(); + for (String string : s) { + if (string.isEmpty()) continue; + int num; + try { + num = Integer.parseInt(string); + } catch (NumberFormatException e) { + continue; + } + if (num >= 0) categoryIdList.add(num); + } + + if(categoryIdList.isEmpty() ||page<0||size<0||orderOption<=0||isDel<0||isDel>1) return ResponseEntity.ok(Message.fail(FAIL_CODE,"Params Error")); + + Page templatesByCategory = templateService.getPageByCategory(categoryIdList,isDel,orderOption,page,size); + + if(userId==0){ + List templateVOList = templatesByCategory.getContent() + .stream() + .map(templateDO -> convertToTemplateVO(templateDO, new ArrayList<>())) + .toList(); + return ResponseEntity.ok(Message.success(new PageImpl<>(templateVOList, PageRequest.of(page,size), templatesByCategory.getTotalElements()))); + } + List templateIdsByUserStar = starService.getTemplateByUserStar(userId, 0); + List templateVOList = templatesByCategory.getContent() + .stream() + .map(templateDO -> convertToTemplateVO(templateDO, templateIdsByUserStar)) + .toList(); + return ResponseEntity.ok(Message.success(new PageImpl<>(templateVOList, PageRequest.of(page,size), templatesByCategory.getTotalElements()))); + } + + @GetMapping("/page/option/{nameLike}/{categoryIdStr}/{isDel}/{orderOption}/{userId}") + public ResponseEntity>> getTemplatePageByOrder(@PathVariable("nameLike") String nameLike, @PathVariable("categoryIdStr") String categoryIdStr, + @PathVariable("isDel") int isDel, @PathVariable("orderOption") int orderOption, + @PathVariable("userId") int userId, @RequestParam int page, @RequestParam int size){ + List categoryIdList = getCategoryList(categoryIdStr); + + if(categoryIdList.isEmpty() ||page<0||size<0||orderOption<=0||isDel<0||isDel>1||userId<0) return ResponseEntity.ok(Message.fail(FAIL_CODE,"Params Error")); + + Page templatesByCategory = templateService.getPageByOption(nameLike, categoryIdList, isDel, orderOption, page, size); + + if(userId==0){ + List templateVOList = templatesByCategory.getContent() + .stream() + .map(templateDO -> convertToTemplateVO(templateDO, new ArrayList<>())) + .toList(); + return ResponseEntity.ok(Message.success(new PageImpl<>(templateVOList, PageRequest.of(page,size), templatesByCategory.getTotalElements()))); + } + List templateIdsByUserStar = starService.getTemplateByUserStar(userId, 0); + List templateVOList = templatesByCategory.getContent() + .stream() + .map(templateDO -> convertToTemplateVO(templateDO, templateIdsByUserStar)) + .toList(); + return ResponseEntity.ok(Message.success(new PageImpl<>(templateVOList, PageRequest.of(page,size), templatesByCategory.getTotalElements()))); + } + + @GetMapping("/page/order/{order}/{isDel}/{userId}") + public ResponseEntity>> getTemplatePageByOrder(@PathVariable("order") int order, @PathVariable("isDel") int isDel, + @PathVariable("userId") int userId, + @RequestParam int page, @RequestParam int size){ + + if(page<0||size<=0) return ResponseEntity.ok(Message.fail(FAIL_CODE,"Params Error")); + + Page res=null; + if(order==1) res=templateService.getPageByIsDelOrderByCreateTimeAsc(isDel, page, size); + else if (order==2) res=templateService.getPageByIsDelOrderByCreateTimeDesc(isDel, page, size); + else if (order==3) res=templateService.getPageByIsDelOrderByDownloadAsc(isDel, page, size); + else if (order==4) res=templateService.getPageByIsDelOrderByDownloadDesc(isDel, page, size); + else if (order==5) res=templateService.getPageByIsDelOrderByUpdateTimeAsc(isDel, page, size); + else if (order==6) res=templateService.getPageByIsDelOrderByUpdateTimeDesc(isDel, page, size); + else if (order==7) res=templateService.getPageByIsDelOrderByStarAsc(isDel, page, size); + else if (order==8) res=templateService.getPageByIsDelOrderByStarDesc(isDel, page, size); + if(res==null) return getTemplatesByPage(isDel, userId, page, size); + + if(userId==0){ + List templateVOList = res.getContent() + .stream() + .map(templateDO -> convertToTemplateVO(templateDO, new ArrayList<>())) + .toList(); + return ResponseEntity.ok(Message.success(new PageImpl<>(templateVOList, PageRequest.of(page,size), res.getTotalElements()))); + } + List templateIdsByUserStar = starService.getTemplateByUserStar(userId, 0); + List templateVOList = res.getContent() + .stream() + .map(templateDO -> convertToTemplateVO(templateDO, templateIdsByUserStar)) + .toList(); + return ResponseEntity.ok(Message.success(new PageImpl<>(templateVOList, PageRequest.of(page,size), res.getTotalElements()))); + } + + @GetMapping("/page/name/{name}/{isDel}/{orderOption}/{userId}") + public ResponseEntity>> getPageByName(@PathVariable("name") String name, @PathVariable("isDel") int isDel, + @PathVariable("orderOption") int orderOption, @PathVariable("userId") int userId, + @RequestParam int page, @RequestParam int size){ + if(page<0||size<=0||orderOption<=0||isDel<0||isDel>1||userId<0) return ResponseEntity.ok(Message.fail(FAIL_CODE,"Params Error")); + + if(name.isEmpty()) return getTemplatePageByOrder(orderOption, isDel, userId, page, size); + Page templatesByCategory = templateService.getPageByNameLike(name,isDel,orderOption, page, size); + + if(userId==0){ + List templateVOList = templatesByCategory.getContent() + .stream() + .map(templateDO -> convertToTemplateVO(templateDO, new ArrayList<>())) + .toList(); + return ResponseEntity.ok(Message.success(new PageImpl<>(templateVOList, PageRequest.of(page,size), templatesByCategory.getTotalElements()))); + } + List templateIdsByUserStar = starService.getTemplateByUserStar(userId, 0); + List templateVOList = templatesByCategory.getContent() + .stream() + .map(templateDO -> convertToTemplateVO(templateDO, templateIdsByUserStar)) + .toList(); + return ResponseEntity.ok(Message.success(new PageImpl<>(templateVOList, PageRequest.of(page,size), templatesByCategory.getTotalElements()))); + } + + @GetMapping("/page/user/{user}") + public ResponseEntity>> getTemplatePageByUser(@PathVariable("user") int userId, @RequestParam int page, @RequestParam int size){ + if(userId==0||page<0||size<0) return ResponseEntity.ok(Message.fail(FAIL_CODE,"Params Error")); + + Page templatePageByUserId = templateService.getPageByUserId(userId, page, size); + return ResponseEntity.ok(Message.success(templatePageByUserId)); + } + + @GetMapping("/page/{isDel}/{userId}") + public ResponseEntity>> getTemplatesByPage(@PathVariable("isDel") int isDel, + @PathVariable("userId") int userId, + @RequestParam int page, @RequestParam int size) { + if(isDel<0||isDel>1||page<0||size<=0||userId<0) return ResponseEntity.ok(Message.fail(FAIL_CODE,"Params Error")); + + Page templatesByPage = templateService.getTemplatesByPage(isDel, page, size); + if(userId==0){ +// Page templatesByPage = templateService.getTemplatesByPage(isDel, page, size); + List templateVOList = templatesByPage.getContent() + .stream() + .map(templateDO -> convertToTemplateVO(templateDO, new ArrayList<>())) + .toList(); + return ResponseEntity.ok(Message.success(new PageImpl<>(templateVOList, PageRequest.of(page,size), templatesByPage.getTotalElements()))); + } + List templateIdsByUserStar = starService.getTemplateByUserStar(userId, 0); +// Page templatesByPage = templateService.getTemplatesByPage(isDel, page, size); + List templateVOList = templatesByPage.getContent() + .stream() + .map(templateDO -> convertToTemplateVO(templateDO, templateIdsByUserStar)) + .toList(); + return ResponseEntity.ok(Message.success(new PageImpl<>(templateVOList, PageRequest.of(page,size), templatesByPage.getTotalElements()))); + } + + private TemplateVO convertToTemplateVO(TemplateDO templateDO, List ids) { + + return new TemplateVO(templateDO,ids.contains(templateDO.getId())); + } + + @GetMapping("/download/{ownerId}/{templateId}/{version}/{versionId}") + public ResponseEntity download(@PathVariable("ownerId") Integer ownerId, @PathVariable("templateId") Integer templateId, + @PathVariable("version") String version, @PathVariable("versionId") Integer versionId) { + if (templateId == null || version == null || ownerId==null) throw new HertzbeatTemplateHubException("id empty"); + + Resource resource = templateService.downloadTemplate(ownerId, templateId, version, versionId); + if(resource!=null) return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + version + ".yml\"").body(resource); + else return ResponseEntity.notFound().build(); + } + + @GetMapping("/download/latest/{ownerId}/{templateId}/{versionId}") + public ResponseEntity downloadLatest(@PathVariable("ownerId") Integer ownerId, @PathVariable("templateId") Integer templateId, + @PathVariable("versionId") Integer versionId) { + if (templateId == null || ownerId==null) throw new HertzbeatTemplateHubException("params error"); + + VersionDO latestVersionDO = versionService.getLatestVersion(templateId); + if(latestVersionDO ==null) throw new HertzbeatTemplateHubException("no version found"); + + Resource resource = templateService.downloadTemplate(ownerId, templateId, latestVersionDO.getVersion(), versionId); + if(resource!=null) return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + latestVersionDO.getVersion() + ".yml\"").body(resource); + else return ResponseEntity.notFound().build(); + } + + @DeleteMapping("/delete/{ownerId}/{templateId}/{version}") + public ResponseEntity> deleteFile(@PathVariable("ownerId") Integer ownerId, @PathVariable("templateId") Integer templateId, @PathVariable("version") String version) { + if (templateId == null || version == null || ownerId==null) return ResponseEntity.ok(Message.fail(FAIL_CODE,"params error")); + + templateService.deleteTemplate(ownerId, templateId,version); + return ResponseEntity.ok(Message.success("delete success")); + } + + private static @NotNull List getCategoryList(String categoryIdStr) { + String[] categoryIdStrList = categoryIdStr.split("_"); + List categoryIdList=new ArrayList<>(); + for (String string : categoryIdStrList) { + if (string.isEmpty()) continue; + int num; + try { + num = Integer.parseInt(string); + } catch (NumberFormatException e) { + continue; + } + if (num >= 0) categoryIdList.add(num); + } + return categoryIdList; + } + + @GetMapping("/") + public ResponseEntity>> getAllTemplates(){ + + List allTemplates = templateService.getAllTemplates(); + return ResponseEntity.ok(Message.success(allTemplates)); + } + + @PostMapping("/star") + @Transactional + public ResponseEntity> starVersion(@RequestParam("user") int userId,@RequestParam("template") int templateId){ + + if(userId==0||templateId==0){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"params error")); + } + + boolean b = starService.assertTemplateIdIsStarByUser(userId, templateId); + if(b){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"Already star template")); + } + + String nowTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + + int isOk = starService.starTemplate(userId, templateId, nowTime); + + if(isOk==0){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"star template error")); + } + + boolean isOk3 = templateService.starTemplate(templateId); + if(!isOk3){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"star template error")); + } + + return ResponseEntity.ok(Message.success("star template success")); + } + +// @Deprecated +// @GetMapping("/query/{option}/{isDel}") +// public ResponseEntity>> getTemplateByOption(@PathVariable("option") int option, +// @PathVariable("isDel") int isDel){ +// if(option<=0||isDel<0||isDel>1){ +// return ResponseEntity.ok(Message.fail(FAIL_CODE,"Params Error")); +// } +// List res=new ArrayList<>(); +// if(option==1){ +// res=templateService.getByIsDelOrderByCreateTimeAsc(isDel); +// } else if (option==2) { +// res=templateService.getByIsDelOrderByCreateTimeDesc(isDel); +// }else if (option==3) { +// res=templateService.getByIsDelOrderByDownloadAsc(isDel); +// }else if (option==4) { +// res=templateService.getByIsDelOrderByDownloadDesc(isDel); +// }else if (option==5) { +// res=templateService.getPageByIsDelOrderByUpdateTimeAsc(isDel); +// } else if (option==6) { +// res=templateService.getByIsDelOrderByUpdateTimeDesc(isDel); +// }else if (option==7) { +// res=templateService.getByIsDelOrderByStarAsc(isDel); +// }else if (option==8) { +// res=templateService.getByIsDelOrderByStarDesc(isDel); +// }else { +// return ResponseEntity.ok(Message.fail(FAIL_CODE,"Params Error")); +// } +// if(res.isEmpty()){ +// return getAllTemplates(); +// } +// return ResponseEntity.ok(Message.success(res)); +// } +// +// @Deprecated +// @GetMapping("/{user}") +// public ResponseEntity>> getTemplateByUser(@PathVariable("user") int userId){ +// if(userId==0){ +// return ResponseEntity.ok(Message.fail(FAIL_CODE,"User Error")); +// } +// +// return templateService.getAllTemplatesByUserId(userId); +// } +// +// @Deprecated +// @GetMapping("/category/{categoryId}") +// public ResponseEntity>> getTemplateByCategory(@PathVariable("categoryId") int categoryId){ +// if(categoryId<=0){ +// return ResponseEntity.ok(Message.fail(FAIL_CODE,"Error category")); +// } +// +// List templatesByCategory = templateService.getTemplatesByCategory(categoryId); +// +// return ResponseEntity.ok(Message.success(templatesByCategory)); +// } +// +// @Deprecated +// @GetMapping("/name/{name}") +// public ResponseEntity>> getTemplateByName(@PathVariable("name") String name){ +// if(name.isEmpty()){ +// return getAllTemplates(); +// } +// +// List templatesByCategory = templateService.getTemplatesByNameLike(name); +// +// return ResponseEntity.ok(Message.success(templatesByCategory)); +// } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TemplateTagController.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TemplateTagController.java new file mode 100644 index 00000000000..48cd63700b4 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TemplateTagController.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.apache.hertzbeat.templatehub.service.TemplateTagService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; + +@Slf4j +@RestController +@CrossOrigin(origins = "*") +@RequestMapping("templateTag") +public class TemplateTagController { + + @Autowired + private TemplateTagService templateTagService; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TokenStorage.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TokenStorage.java new file mode 100644 index 00000000000..b46b1fb090d --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/TokenStorage.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * token storage + * you can use redis instead of it + * @author tomsun28 + * @date 2020-12-03 23:01 + */ +public class TokenStorage { + + private static final String TOKEN_SPLIT = "--"; + private static final int TOKEN_SPLIT_SIZE = 4; + private static final int START_TIME_INDEX = 1; + private static final int PERIOD_TIME_INDEX = 2; + + private static final Map TOKEN_MAP = new ConcurrentHashMap<>(); + + /** + * match token + * @param key key + * @param currentToken tokenValue is : admin--issueTime--refreshPeriodTime--uuid + * @return false when token not exist, not equals or Expired, else true + */ + public static boolean matchToken(String key, String currentToken) { + if (key == null || currentToken == null || "".equals(key) || "".equals(currentToken) + || currentToken.split(TOKEN_SPLIT).length != TOKEN_SPLIT_SIZE) { + return false; + } + String originToken = TOKEN_MAP.get(key); + if (originToken == null || !originToken.equals(currentToken)) { + removeToken(key); + return false; + } + String[] tokenArr = currentToken.split(TOKEN_SPLIT); + if (Long.parseLong(tokenArr[START_TIME_INDEX]) + Long.parseLong(tokenArr[PERIOD_TIME_INDEX]) + <= System.currentTimeMillis()) { + // token expired, remove it + removeToken(key); + return false; + } + return true; + } + + public static void removeToken(String key) { + if (key == null || "".equals(key)) { + return; + } + TOKEN_MAP.remove(key); + } + + public static void addToken(String key, String token) { + if (key == null || token == null || "".equals(key) || "".equals(token) + || token.split(TOKEN_SPLIT).length != TOKEN_SPLIT_SIZE) { + return; + } + TOKEN_MAP.put(key, token); + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/UserController.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/UserController.java new file mode 100644 index 00000000000..05c742fb314 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/UserController.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import com.usthe.sureness.subject.SubjectSum; +import com.usthe.sureness.util.SurenessContextHolder; +import io.jsonwebtoken.ExpiredJwtException; +import io.swagger.v3.oas.annotations.Operation; +import jakarta.validation.Valid; +import lombok.extern.slf4j.Slf4j; +import org.apache.hertzbeat.templatehub.model.DTO.LoginDto; +import org.apache.hertzbeat.templatehub.model.DTO.Message; +import org.apache.hertzbeat.templatehub.model.DTO.RefreshTokenResponse; +import org.apache.hertzbeat.templatehub.model.DTO.TokenDto; +import org.apache.hertzbeat.templatehub.service.AccountService; +import org.apache.hertzbeat.templatehub.util.ResponseUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.naming.AuthenticationException; +import java.util.List; +import java.util.Map; + +import static org.apache.hertzbeat.templatehub.constants.CommonConstants.LOGIN_FAILED_CODE; + +@Slf4j +@RestController +@CrossOrigin(origins = "*") +@RequestMapping("user") +public class UserController { + + @Autowired + private AccountService accountService; + + @GetMapping("/role") + public ResponseEntity getUserRoles() { + SubjectSum subject = SurenessContextHolder.getBindSubject(); + if (subject == null || subject.getPrincipal() == null) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } + String appId = (String) subject.getPrincipal(); + List roles = accountService.loadAccountRoles(appId); + return ResponseEntity.ok(Message.builder().data(roles).build()); + } + + @PostMapping("/authority/role/{appId}/{roleId}") + public ResponseEntity authorityUserRole(@PathVariable String appId, @PathVariable Long roleId) { + SubjectSum subject = SurenessContextHolder.getBindSubject(); + if (subject == null || subject.getPrincipal() == null) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } + String principal = (String) subject.getPrincipal(); + if (!principal.equals(appId)) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } + + boolean flag = accountService.authorityUserRole(appId, roleId); + return flag ? ResponseEntity.ok().build() : ResponseEntity.status(HttpStatus.CONFLICT).build(); + } + + @DeleteMapping("/authority/role/{appId}/{roleId}") + public ResponseEntity deleteAuthorityUserRole(@PathVariable String appId, @PathVariable Long roleId) { + SubjectSum subject = SurenessContextHolder.getBindSubject(); + if (subject == null || subject.getPrincipal() == null) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } + String principal = (String) subject.getPrincipal(); + if (!principal.equals(appId)) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } + + return accountService.deleteAuthorityUserRole(appId, roleId) ? + ResponseEntity.ok().build() : ResponseEntity.status(HttpStatus.CONFLICT).build(); + } + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/VersionController.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/VersionController.java new file mode 100644 index 00000000000..fa3059bce52 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/controller/VersionController.java @@ -0,0 +1,113 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.hertzbeat.templatehub.model.DO.VersionDO; +import org.apache.hertzbeat.templatehub.model.DTO.Message; +import org.apache.hertzbeat.templatehub.model.DTO.TemplateDto; +import org.apache.hertzbeat.templatehub.service.VersionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; + +import static org.apache.hertzbeat.templatehub.constants.CommonConstants.FAIL_CODE; + +@Slf4j +@RestController +@RequestMapping("version") +@CrossOrigin(origins = "*") +public class VersionController { + + @Autowired + private VersionService versionService; + + @Deprecated + @GetMapping("/version/{template}") + public ResponseEntity>> getVersionsByTemplate(@PathVariable("template") int templateId){ + + if(templateId==0){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"Template information error")); + } + + List versionDOS = versionService.getVersions(templateId); + + return ResponseEntity.ok(Message.success(versionDOS)); + } + + @GetMapping("/get/{versionId}") + public ResponseEntity> getVersionById(@PathVariable("versionId") int versionId){ + + if(versionId==0){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"params error")); + } + + VersionDO versionDO = versionService.getVersion(versionId); + if(versionDO ==null){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"version not found")); + } + return ResponseEntity.ok(Message.success(versionDO)); + } + + @GetMapping("/page/{template}/{isDel}") + public ResponseEntity>> getVersionPageByTemplate(@PathVariable("template") int templateId, + @PathVariable("isDel") int isDel, + @RequestParam int page, @RequestParam int size){ + + if(templateId==0|| page <0|| size <=0 || isDel<0 || isDel>1){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"Params Error")); + } + Page versionPageByTemplate = versionService.getVersionPageByTemplate(templateId, isDel, page, size); + return ResponseEntity.ok(Message.success(versionPageByTemplate)); + } + + @PostMapping("/upload") + public ResponseEntity> uploadVersion(@ModelAttribute("templateDto") String s, + @RequestParam("file") MultipartFile file){ + if(file.isEmpty()) return ResponseEntity.ok(Message.fail(FAIL_CODE,"The version file is empty")); + + if(s==null || s.isEmpty()) return ResponseEntity.ok(Message.fail(FAIL_CODE,"version info is empty")); + + ObjectMapper objectMapper = new ObjectMapper(); + TemplateDto templateDto; + try { + templateDto = objectMapper.readValue(s, TemplateDto.class); + } catch (JsonProcessingException e) { + return ResponseEntity.ok(Message.fail(FAIL_CODE, + "Template description information reading exception"+e.getMessage())); + } + templateDto.setCreate_time(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + templateDto.setUpdate_time(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + + if(templateDto.getUserId()==0||templateDto.getName().isEmpty()||templateDto.getCurrentVersion().isEmpty()){ + return ResponseEntity.ok(Message.fail(FAIL_CODE,"Template description information is missing")); + } + + boolean upload = versionService.upload(templateDto, file); + if(upload) return ResponseEntity.ok(Message.success("upload success")); + return ResponseEntity.ok(Message.fail(FAIL_CODE,"Error uploading version")); + } +} \ No newline at end of file diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/CommonError.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/CommonError.java new file mode 100644 index 00000000000..b10fbb6d94f --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/CommonError.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.exception; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +@ToString +@AllArgsConstructor +@Getter +public enum CommonError { + UNKNOWN_ERROR("执行过程异常,请重试"), + PARAMS_ERROR("非法参数"), + OBJECT_ERROR("对象为空"), + QUERY_ERROR("查询结果为空"), + REQUEST_ERROR("请求参数为空"); + + private String errMsg; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/GlobalExceptionHandler.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/GlobalExceptionHandler.java new file mode 100644 index 00000000000..908289c9a1b --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/GlobalExceptionHandler.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.exception; + +import lombok.extern.slf4j.Slf4j; +import org.apache.hertzbeat.templatehub.model.DTO.Message; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +import static org.apache.hertzbeat.templatehub.constants.CommonConstants.FAIL_CODE; + +@Slf4j +@ControllerAdvice +public class GlobalExceptionHandler { + @ResponseBody + @ExceptionHandler(HertzbeatTemplateHubException.class) + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public ResponseEntity> customException(HertzbeatTemplateHubException e) { + log.error("系统异常:{}", e.getMessage(), e); + + String errMessage = e.getMessage(); + + return ResponseEntity.ok(Message.fail(FAIL_CODE,errMessage)); + } + + @ResponseBody + @ExceptionHandler(Exception.class) + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public ResponseEntity> exception(Exception e) { + + log.error("系统异常:{}", e.getMessage(), e); + if (e.getMessage().equals("不允许访问")) { + return ResponseEntity.ok(Message.fail(FAIL_CODE,"您没有权限操作此功能")); + } + + return ResponseEntity.ok(Message.fail(FAIL_CODE,CommonError.UNKNOWN_ERROR.getErrMsg())); + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/HertzbeatTemplateHubException.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/HertzbeatTemplateHubException.java new file mode 100644 index 00000000000..63522b2a073 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/HertzbeatTemplateHubException.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.exception; + +public class HertzbeatTemplateHubException extends RuntimeException { + + private String errMsg; + + public HertzbeatTemplateHubException() { + } + + public HertzbeatTemplateHubException(String errMsg) { + super(errMsg); + this.errMsg = errMsg; + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/RestErrorResponse.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/RestErrorResponse.java new file mode 100644 index 00000000000..2f980ef7204 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/exception/RestErrorResponse.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.exception; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.ToString; + +import java.io.Serializable; + +@Data +@ToString +@AllArgsConstructor +public class RestErrorResponse implements Serializable { + + private String errMsg; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthResourceDO.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthResourceDO.java new file mode 100644 index 00000000000..e802dd7b16a --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthResourceDO.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DO; + +import jakarta.persistence.*; +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.Range; + +import java.time.LocalDateTime; + +/** + * resource entity + * @author tomsun28 + * @date 00:00 2019-07-26 + */ +@Entity +@Table(name = "auth_resource") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AuthResourceDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotBlank(message = "name can not null") + @Length(min = 3, max = 100, message = "name length in 3-100") + private String name; + + @NotBlank(message = "code can not null") + @Length(min = 3, max = 100, message = "code length in 3-100") + private String code; + + @NotBlank(message = "uri can not null") + private String uri; + + private String type; + + @NotBlank(message = "method can not null") + private String method; + + @Range(min = 0, max = 9, message = "1 enable, 9 disable") + private Integer status; + + private String description; + + private LocalDateTime gmtCreate; + + private LocalDateTime gmtUpdate; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthRoleDO.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthRoleDO.java new file mode 100644 index 00000000000..6e42bdbe069 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthRoleDO.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DO; + +import jakarta.persistence.*; +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.Range; + +import java.time.LocalDateTime; + +/** + * role entity + * @author tomsun28 + * @date 00:27 2019-07-27 + */ +@Entity +@Table(name = "auth_role") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AuthRoleDO { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotBlank(message = "name can not null") + @Length(min = 3, max = 100, message = "name length in 3-100") + private String name; + + @NotBlank(message = "code can not null") + @Length(min = 3, max = 100, message = "code length in 3-100") + private String code; + + @Range(min = 0, max = 9, message = "1 enable, 9 disable") + private Integer status; + + private String description; + + private LocalDateTime gmtCreate; + + private LocalDateTime gmtUpdate; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthRoleResourceBindDO.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthRoleResourceBindDO.java new file mode 100644 index 00000000000..ec4c7656bcd --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthRoleResourceBindDO.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DO; + +import jakarta.persistence.*; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * resource-role mapping entity + * @author tomsun28 + * @date 00:28 2019-07-27 + */ +@Entity +@Table(name = "auth_role_resource_bind") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AuthRoleResourceBindDO { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotNull(message = "roleId can not null") + private Long roleId; + + @NotNull(message = "resourceId can not null") + private Long resourceId; + + private LocalDateTime gmtCreate; + + private LocalDateTime gmtUpdate; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthUserDO.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthUserDO.java new file mode 100644 index 00000000000..922738ef904 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthUserDO.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DO; + +import java.io.Serializable; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import jakarta.validation.constraints.NotBlank; +import lombok.*; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.Range; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Builder +@Entity +@Table(name = "auth_user") +public class AuthUserDO implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + + @Column(nullable = false) + @Schema(description = "Username, can be repeated, can be modified") + private String name; + + @Column(nullable = false) + @Schema(description = "Email, can be modified, used for user login") + private String email; + + @NotBlank(message = "password can not null") + @Length(min = 3, max = 100, message = "password length in 3-100") + private String password; + + private String salt; + + private String avatar; + + @Range(min = 0, max = 4, message = "1 enable, 2 locked, 3 deleted, 4 illegal") + private Integer status; + + @Column(nullable = false,name = "create_time") + private String createTime; + + @Column(nullable = false,name = "update_time") + private String updateTime; + + @Column(nullable = false,name = "log_off_time") + @Schema(description = "Logout time, if not logged out it is 0, if logged out it is time") + private String logOffTime; + + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthUserRoleBindDO.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthUserRoleBindDO.java new file mode 100644 index 00000000000..37752ae9895 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/AuthUserRoleBindDO.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DO; + +import jakarta.persistence.*; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * user-role mapping entity + * @author tomsun28 + * @date 00:30 2019-07-27 + */ +@Entity +@Table(name = "auth_user_role_bind") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AuthUserRoleBindDO { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotNull(message = "userId can not null") + private Long userId; + + @NotNull(message = "roleId can not null") + private Long roleId; + + private LocalDateTime gmtCreate; + + private LocalDateTime gmtUpdate; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/CategoryDO.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/CategoryDO.java new file mode 100644 index 00000000000..fcb5a704ff3 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/CategoryDO.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DO; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Entity +@Table(name = "category") +public class CategoryDO implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(nullable = false) + @Schema(description = "Category Name") + private String name; + + @Column(nullable = false) + private String description; + + @Column(nullable = false,name = "create_time") + private String createTime; + + @Column(nullable = false, name = "update_time") + private String updateTime; + + @Column(nullable = false,name = "is_del") + @Schema(description = "Delete Mark") + private Integer isDel; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/StarDO.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/StarDO.java new file mode 100644 index 00000000000..43677cce263 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/StarDO.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DO; + +import java.io.Serializable; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Table(name = "star") +@Entity +public class StarDO implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "user_id",nullable = false) + private Integer userId; + + @Column(name = "template_id",nullable = false) + private Integer templateId; + + @Column(name = "create_time",nullable = false) + private String createTime; + + @Column(name = "is_del",nullable = false) + @Schema(description = "Cancel flag, 0 means normal, 1 means cancel") + private Integer isDel; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/TagDO.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/TagDO.java new file mode 100644 index 00000000000..626b339eb1c --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/TagDO.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DO; + +import java.io.Serializable; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Entity +@Table(name = "tag") +public class TagDO implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Schema(description = "Tag name, no duplication allowed, modification allowed") + @Column(nullable = false) + private String name; + + @Column(nullable = false) + private String description; + + @Column(name = "create_time",nullable = false) + private String createTime; + + @Column(name = "is_del",nullable = false) + private Integer isDel; + + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/TemplateDO.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/TemplateDO.java new file mode 100644 index 00000000000..310d609dd98 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/TemplateDO.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DO; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Entity +@Table(name="template") +public class TemplateDO implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id=1; + + @Column(nullable = false) + @Schema(description = "Template name, cannot be modified, but can be repeated") + private String name; + + @Column(nullable = false) + private String description; + + @Column(nullable = false) + @Schema(description = "Latest version id") + private Integer latest; + + @Column(nullable = false) + @Schema(description = "user id") + private Integer user; + + @Column(nullable = false,name = "category_id") + @Schema(description = "Template category id") + private Integer categoryId; + + @Column(nullable = false) + @Schema(description = "Template-tag table id") + private Integer tag; + + @Column(nullable = false) + @Schema(description = "Downloads") + private Integer download; + + @Column(nullable = false) + private Integer star; + + @Column(nullable = false,name = "create_time") + private String createTime; + + @Column(nullable = false, name = "update_time") + private String updateTime; + + @Column(nullable = false,name="off_shelf") + @Schema(description = "Delisting mark, 0 means normal, 1 means delisting") + private Integer offShelf; + + @Column(nullable = false,name = "is_del") + @Schema(description = "Delete mark, 0 means normal, 1 means delete") + private Integer isDel; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/TemplateTagDO.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/TemplateTagDO.java new file mode 100644 index 00000000000..5176fc82315 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/TemplateTagDO.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DO; + +import java.io.Serializable; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Entity +@Table(name = "template_tag") +public class TemplateTagDO implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(nullable = false) + @Schema(description = "template id") + private Integer template; + + @Column(nullable = false) + @Schema(description = "tag id") + private Integer tag; + + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/VersionDO.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/VersionDO.java new file mode 100644 index 00000000000..95e59b87f7c --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/DO/VersionDO.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DO; + +import java.io.Serializable; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Entity +@Table(name = "version") +public class VersionDO implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(nullable = false, name = "template_id") + @Schema(description = "template id") + private Integer templateId; + + @Column(nullable = false) + @Schema(description = "Version name, modification is not allowed") + private String version; + + + @Column(nullable = false) + @Schema(description = "Version description") + private String description; + + @Column(nullable = false) + private Integer download; + + @Column(nullable = false) + private Integer star; + + @Column(nullable = false,name = "create_time") + private String createTime; + + @Column(nullable = false,name = "off_shelf") + private Integer offShelf; + + @Column(nullable = false,name = "is_del") + private Integer isDel; + + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/VO/TemplateVO.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/VO/TemplateVO.java new file mode 100644 index 00000000000..93553cec6b4 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/VO/TemplateVO.java @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; +import org.apache.hertzbeat.templatehub.model.DO.TemplateDO; + +@Data +@ToString +@AllArgsConstructor +@NoArgsConstructor +public class TemplateVO { + + private Integer id; + private String name; + private String description; + private Integer latest; + private Integer user; + private Integer categoryId; + private Integer tag; + private Integer download; + private Integer star; + private String createTime; + private String updateTime; + private Integer offShelf; + private Integer isDel; + private boolean starByNowUser =false; + + public TemplateVO(TemplateDO template, boolean isStarByNowUser) { + this.id = template.getId(); + this.name = template.getName(); + this.description = template.getDescription(); + this.latest = template.getLatest(); + this.user = template.getUser(); + this.categoryId = template.getCategoryId(); + this.tag = template.getTag(); + this.download = template.getDownload(); + this.star = template.getStar(); + this.createTime = template.getCreateTime(); + this.updateTime = template.getUpdateTime(); + this.offShelf = template.getOffShelf(); + this.isDel = template.getIsDel(); + this.starByNowUser = isStarByNowUser; + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthResourceDao.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthResourceDao.java new file mode 100644 index 00000000000..e64fd582580 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthResourceDao.java @@ -0,0 +1,81 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DAO; + +import org.apache.hertzbeat.templatehub.model.DO.AuthResourceDO; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; +import java.util.Optional; + +/** + * @author tomsun28 + * @date 16:40 2019-07-27 + */ +public interface AuthResourceDao extends JpaRepository { + + /** + * Get uri resource and resource-role relationship chain, eg: /api/v2/host===post===[role2,role3,role4] + * @return resource-role chain set + */ + @Query(value = "SELECT CONCAT(LOWER(res.uri),\"===\",LOWER(res.method),\"===[\",IFNULL(GROUP_CONCAT(DISTINCT role.code),\"\"),\"]\") " + + "FROM auth_resource res " + + "LEFT JOIN auth_role_resource_bind bind on res.id = bind.resource_id " + + "LEFT JOIN auth_role role on role.id = bind.role_id " + + "where res.status = 1 " + + "group by res.id", nativeQuery = true) + Optional> getEnableResourcePathRoleData(); + + + + /** + * Get disabled uri resources eg: /api/v2/host===post + * @return resouce set + */ + @Query("select CONCAT(LOWER(resource.uri),'===', resource.method) " + + "from AuthResourceDO resource where resource.status = 9 order by resource.id") + Optional> getDisableResourcePathData(); + + /** + * Get the available API resources owned by the current role in the form of paging + * @param roleId roleId + * @param request page + * @return api resource list + */ + @Query("select distinct resource from AuthResourceDO resource " + + "left join AuthRoleResourceBindDO bind on bind.resourceId = resource.id " + + "where bind.roleId = :roleId " + + "order by resource.id asc") + Page findRoleOwnResource(@Param("roleId") Long roleId, Pageable request); + + /** + * Get the available API resources owned by the current role in the form of paging + * @param roleId roleId + * @param request page + * @return api resource list + */ + @Query("select distinct resource from AuthResourceDO resource " + + " where resource.id not in " + + "(select distinct bind.resourceId from AuthRoleResourceBindDO bind where bind.roleId = :roleId) " + + "order by resource.id asc ") + Page findRoleNotOwnResource(@Param("roleId") Long roleId, Pageable request); +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthRoleDao.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthRoleDao.java new file mode 100644 index 00000000000..02271cf4121 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthRoleDao.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DAO; + +import org.apache.hertzbeat.templatehub.model.DO.AuthRoleDO; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +/** + * @author tomsun28 + * @date 16:42 2019-07-27 + */ +public interface AuthRoleDao extends JpaRepository { + + /** + * Query the role owned by the current user + * @param username username + * @return role list + */ + @Query("select ar.name from AuthRoleDO ar, AuthUserDO au, AuthUserRoleBindDO bind " + + "where ar.id = bind.roleId and au.id = bind.userId and au.name = :username") + List findAccountOwnRoles(@Param("username") String username); + + @Query("select ar.id from AuthRoleDO ar where ar.code = :code") + Long queryIdByCode(@Param("code") String code); +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthRoleResourceBindDao.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthRoleResourceBindDao.java new file mode 100644 index 00000000000..7a68eae05c2 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthRoleResourceBindDao.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DAO; + +import org.apache.hertzbeat.templatehub.model.DO.AuthResourceDO; +import org.apache.hertzbeat.templatehub.model.DO.AuthRoleResourceBindDO; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +/** + * @author tomsun28 + * @date 16:43 2019-07-27 + */ +public interface AuthRoleResourceBindDao extends JpaRepository { + + /** + * Query the resources owned by the current role + * @param roleId roleId + * @return resource list + */ + @Query("select rs from AuthResourceDO rs, AuthRoleResourceBindDO bind " + + "where rs.id = bind.resourceId and bind.roleId = :roleId") + List findRoleBindResourceList(@Param("roleId") Long roleId); + + /** + * delete record which roleId and resource equals this + * @param roleId roleID + * @param resourceId resourceId + */ + @Modifying + @Query("delete from AuthRoleResourceBindDO bind " + + "where bind.roleId = :roleId and bind.resourceId = :resourceId") + void deleteRoleResourceBind(@Param("roleId") Long roleId,@Param("resourceId") Long resourceId); +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthUserDao.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthUserDao.java new file mode 100644 index 00000000000..aa9e142d2f8 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthUserDao.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DAO; + +import org.apache.hertzbeat.templatehub.model.DO.AuthUserDO; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; +import java.util.Optional; + +/** + * @author tomsun28 + * @date 16:43 2019-07-27 + */ +public interface AuthUserDao extends JpaRepository { + + /** + * Get user by email + * @param email email + * @return user + */ + @Query("select au from AuthUserDO au where au.email = :email") + Optional findAuthUserByEmail(@Param("email") String email); + + /** + * Query the role owned by the current user + * @param username username + * @return role list + */ + @Query("select ar.code from AuthRoleDO ar, AuthUserDO au, AuthUserRoleBindDO bind " + + "where ar.id = bind.roleId and au.id = bind.userId and au.email = :username") + List findAccountOwnRoles(@Param("username") String username); +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthUserRoleBindDao.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthUserRoleBindDao.java new file mode 100644 index 00000000000..804785b90ec --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/AuthUserRoleBindDao.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DAO; + +import org.apache.hertzbeat.templatehub.model.DO.AuthRoleDO; +import org.apache.hertzbeat.templatehub.model.DO.AuthUserRoleBindDO; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +/** + * @author tomsun28 + * @date 16:44 2019-07-27 + */ +public interface AuthUserRoleBindDao extends JpaRepository { + + /** + * Query the role owned by the current user + * @param userId userId + * @return role list + */ + @Query("select ar from AuthRoleDO ar, AuthUserRoleBindDO bind " + + "where ar.id = bind.roleId and bind.userId = :userId") + List findUserBindRoleList(@Param("userId") Long userId); + + /** + * delete record which roleId and userId equals this + * @param roleId roleID + * @param userId userId + */ + @Query("delete from AuthUserRoleBindDO bind " + + "where bind.roleId = :roleId and bind.userId = :userId") + void deleteRoleResourceBind(@Param("roleId") Long roleId,@Param("userId") Long userId); +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/CategoryDao.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/CategoryDao.java new file mode 100644 index 00000000000..d9b11f46242 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/CategoryDao.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DAO; + +import org.apache.hertzbeat.templatehub.model.DO.CategoryDO; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +public interface CategoryDao extends JpaRepository , Repository { + + List findAllByIsDel(int isDel); + + Page findAllByIsDel(int isDel, Pageable pageable); + + @Modifying(clearAutomatically = true) + @Transactional + @Query(value = "UPDATE category set `is_del` = 1 where id=?", nativeQuery = true) + int deleteByIsDel(int id); +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/StarDao.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/StarDao.java new file mode 100644 index 00000000000..76e813103b4 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/StarDao.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DAO; + +import org.apache.hertzbeat.templatehub.model.DO.StarDO; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +public interface StarDao extends JpaRepository , Repository { + + @Modifying(clearAutomatically = true) + @Transactional + @Query(value = "UPDATE star set `is_del` = ? where `user_id` = ? AND template_id=? AND is_del=?", nativeQuery = true) + int cancelByUser(int cancel, int userId,int templateId,int isCancel); + + @Query(value = "select star.template_id from star where `user_id` = ? AND is_del=?", nativeQuery = true) + List queryTemplateIdByUserAndIsDel(int userId, int isDel); + +// @Query(value = "select star.id from star where `user_id` = ? AND is_del=?", nativeQuery = true) + boolean existsStarByTemplateIdAndUserIdAndIsDel(int templateId ,int userId, int isDel); + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/TemplateDao.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/TemplateDao.java new file mode 100644 index 00000000000..390d0be2f08 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/TemplateDao.java @@ -0,0 +1,146 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DAO; + +import org.apache.hertzbeat.templatehub.model.DO.TemplateDO; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +public interface TemplateDao extends JpaRepository { + + @Query(value = "select id from template where name= ? and `user`= ?",nativeQuery=true) + int queryId(String name, int user); + + @Modifying(clearAutomatically = true) + @Query(value = "UPDATE template set `latest` = ? where `id` = ?",nativeQuery=true) + int updateTemplate(int latest,int id); + + @Query(value = "select COUNT(*) from template where `name` = ? and `user` = ?",nativeQuery=true) + int queryCountByNameAndUser(String name,int user); + + @Query(value = "select COUNT(template.id) from template where `is_del` = ? and off_shelf = ? ",nativeQuery=true) + int queryCountByIsDelAndOffShelf(int isDel, int offShelf); + + @Deprecated + @Query(value = "select * from template where `user` = ? and `is_del` = ?",nativeQuery=true) + List queryByUserId(int user, int isDel); + + @Query(value = "select * from template where `user` = ? and `is_del` = ?", nativeQuery = true) + Page queryPageByUserId(int user, int isDel, Pageable pageable); + + @Deprecated + @Query(value = "select * from template where `category_id` = ? and `is_del` = ?",nativeQuery=true) + List queryByCategory(int categoryId, int isDel); + + @Query(value = "select * from template where `category_id` IN ? and `is_del` = ?",nativeQuery=true) + Page queryPageByCategory(List categoryIdList, int isDel, Pageable pageable); + + @Query(value = "select * from template where name like CONCAT('%',?,'%') AND `category_id` IN ? AND `is_del` = ?",nativeQuery=true) + Page queryPageByNameLikeAndCategory(String nameLike, List categoryIdList, int isDel, Pageable pageable); + + @Deprecated + @Query(value = "select * from template where is_del=? AND name like CONCAT('%',?,'%') ",nativeQuery = true) + List queryByNameLike(int isDel, String name); + + @Query(value = "select * from template where is_del=? AND name like CONCAT('%',?,'%') ",nativeQuery = true) + Page queryPageByNameLike(int isDel, String name, Pageable pageable); + + @Query(value = "select * from template where `is_del` = ?",nativeQuery=true) + List queryAllByIsDel(int isDel); + + @Query(value = "select * from template where `is_del` = ?",nativeQuery=true) + Page queryPageByIsDel(int isDel, Pageable pageable); + + @Deprecated + @Query(value = "select * from template where is_del = ? order by create_time desc ",nativeQuery = true) + List queryAllByIsDelOrderByCreateTimeDesc(int isDel); + + @Query(value = "select * from template where is_del = ? order by create_time desc ",nativeQuery = true) + Page queryPageByIsDelOrderByCreateTimeDesc(int isDel, Pageable pageable); + + @Deprecated + @Query(value = "select * from template where is_del = ? order by create_time",nativeQuery = true) + List queryAllByIsDelOrderByCreateTimeAsc(int isDel); + + @Query(value = "select * from template where is_del = ? order by create_time",nativeQuery = true) + Page queryPageByIsDelOrderByCreateTimeAsc(int isDel, Pageable pageable); + + @Deprecated + @Query(value = "select * from template where is_del = ? order by update_time desc ",nativeQuery = true) + List getByIsDelOrderByUpdateTimeDesc(int isDel); + + @Query(value = "select * from template where is_del = ? order by update_time desc ",nativeQuery = true) + Page queryPageByIsDelOrderByUpdateTimeDesc(int isDel, Pageable pageable); + + @Deprecated + @Query(value = "select * from template where is_del = ? order by update_time",nativeQuery = true) + List getByIsDelOrderByUpdateTimeAsc(int isDel); + + @Query(value = "select * from template where is_del = ? order by update_time",nativeQuery = true) + Page queryPageByIsDelOrderByUpdateTimeAsc(int isDel, Pageable pageable); + + @Deprecated + @Query(value = "select * from template where is_del = ? order by star desc ",nativeQuery = true) + List getByIsDelOrderByStarDesc(int isDel); + + @Query(value = "select * from template where is_del = ? order by star desc ",nativeQuery = true) + Page queryPageByIsDelOrderByStarDesc(int isDel, Pageable pageable); + + @Deprecated + @Query(value = "select * from template where is_del = ? order by star",nativeQuery = true) + List getByIsDelOrderByStarAsc(int isDel); + + @Query(value = "select * from template where is_del = ? order by star",nativeQuery = true) + Page queryPageByIsDelOrderByStarAsc(int isDel, Pageable pageable); + + @Deprecated + @Query(value = "select * from template where is_del = ? order by download desc ",nativeQuery = true) + List getByIsDelOrderByDownloadDesc(int isDel); + + @Query(value = "select * from template where is_del = ? order by download desc ",nativeQuery = true) + Page queryPageByIsDelOrderByDownloadDesc(int isDel, Pageable pageable); + + @Deprecated + @Query(value = "select * from template where is_del = ? order by download",nativeQuery = true) + List getByIsDelOrderByDownloadAsc(int isDel); + + @Query(value = "select * from template where is_del = ? order by download",nativeQuery = true) + Page queryPageByIsDelOrderByDownloadAsc(int isDel, Pageable pageable); + + @Transactional + @Modifying(clearAutomatically = true) + @Query(value = "UPDATE template set `download` = `download` + ? where `id` = ?",nativeQuery=true) + int downloadUpdate(int num, int id); + + TemplateDO findTemplateById(int id); + + @Transactional + @Modifying(clearAutomatically = true) + @Query(value = "UPDATE template set star = star - ? where `id` = ? AND is_del=0 AND off_shelf=0",nativeQuery=true) + int cancelStarTemplate(int num, int templateId); + + @Transactional + @Query(value = "select template.* from template left join star on template.id = star.template_id where star.user_id = ? AND star.is_del=? AND template.is_del=? AND template.off_shelf=?", nativeQuery = true) + Page queryPageByUserStar(int userId, int isCancel, int isDel, int offShelf, Pageable pageable); +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/VersionDao.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/VersionDao.java new file mode 100644 index 00000000000..cc090f3dac2 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dao/VersionDao.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DAO; + +import org.apache.hertzbeat.templatehub.model.DO.VersionDO; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +public interface VersionDao extends JpaRepository , Repository { + + /** + * Query the inserted version ID based on the template ID and version number + * @return Returns the version id of the query + */ + @Query(value = "select id from version where `template_id` = ? and `version` = ?", nativeQuery = true) + int queryId(int templateId, String version); + + /** + * Check whether there is the same version data according to the template id and version number, that is, query the number + * @return Returns the number of versions queried + */ + @Query(value = "SELECT COUNT(*) from version where `template_id` = ? and `version` = ?", nativeQuery = true) + int queryCountByTemplateAndVersion(int templateId, String version); + + @Deprecated + @Query(value = "select * from version where `template_id` = ? and `is_del` = 0", nativeQuery = true) + List queryVersionByTemplateId(int templateId); + + @Query(value = "select * from version where `template_id` = ? and `is_del` = ?", nativeQuery = true) + Page queryPageByTemplateId(int templateId, int isDel, Pageable pageable); + + @Transactional + @Modifying(clearAutomatically = true) + @Query(value = "UPDATE version set `download` = `download` + ? where `id` = ?",nativeQuery=true) + int downloadUpdate(int num, int id); + + @Deprecated + @Transactional + @Query(value = "select version.* from version left join star on version.id = star.version_id where star.user_id = ? AND star.is_del=? AND version.is_del=? AND version.off_shelf=?", nativeQuery = true) + List findAllByUserStar(int userId, int isCancel, int isDel, int offShelf); + + + @Transactional + @Modifying(clearAutomatically = true) + @Query(value = "UPDATE version set star = version.star - ? where `id` = ? AND is_del=0 AND off_shelf=0",nativeQuery=true) + int cancelStarVersion(int num, int versionId); + + @Transactional + @Query(value = "select version.* from version join template on version.id = template.latest where template.id = ?", nativeQuery = true) + VersionDO queryLatestByTemplate(int templateId); +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/LoginDto.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/LoginDto.java new file mode 100644 index 00000000000..6909ab16f09 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/LoginDto.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DTO; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import static io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_ONLY; + +/** + * Login registered account information transfer body email + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Schema(description = "Account information transfer body") +public class LoginDto { + + /** + * type + * 1. Account (email) username password login 2. github login + */ + @Schema(description = "type", example = "1", accessMode = READ_ONLY) + @Max(value = 4, message = "1. Account (email) password login 2. github login 3. WeChat login") + private Byte type; + + /** + * User ID + */ + @Schema(description = "user identification", example = "1", accessMode = READ_ONLY) + @NotBlank(message = "Identifier can not null") + private String identifier; + + /** + * key + */ + @Schema(description = "Secret key", example = "1", accessMode = READ_ONLY) + @NotBlank(message = "Credential can not null") + @Size(max = 512, message = "credential max length 512") + private String credential; + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/Message.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/Message.java new file mode 100644 index 00000000000..6586eac7c6d --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/Message.java @@ -0,0 +1,97 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DTO; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.ToString; +import org.apache.hertzbeat.templatehub.constants.CommonConstants; + +/** + * Unified message structure definition for front and back ends + *

    + * { + * data:{....}, + * msg: message, + * code: 3432 + * } + */ + +@Data +@ToString +@Builder +@AllArgsConstructor +public class Message { + + /** + * response code, not http code + */ + @Schema(title = "Response Code") + private byte code = CommonConstants.SUCCESS_CODE; + + /** + * exception message when error happen or success message + */ + @Schema(title = "Other Message") + private String msg; + + /** + * message body data + */ + @Schema(description = "Response Data") + private T data; + + public static Message success() { + return new Message<>(); + } + + public static Message success(String msg) { + return new Message<>(msg); + } + + public static Message fail(byte code, String msg) { + return new Message<>(code, msg); + } + + public static Message success(T data) { + return new Message<>(data); + } + + public static Message successWithData(T data) { + return new Message<>(data); + } + + private Message() { + } + + private Message(String msg) { + this.msg = msg; + } + + private Message(byte code, String msg) { + this.code = code; + this.msg = msg; + } + + private Message(T data) { + this.data = data; + } + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/RefreshTokenResponse.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/RefreshTokenResponse.java new file mode 100644 index 00000000000..fcbeb882ff5 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/RefreshTokenResponse.java @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DTO; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Refresh Token Response + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "flash token response") +public class RefreshTokenResponse { + @Schema(title = "Access Token") + private String token; + + @Schema(title = "Refresh Token") + private String refreshToken; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/SignUpDto.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/SignUpDto.java new file mode 100644 index 00000000000..780d9602bf3 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/SignUpDto.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DTO; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import static io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_ONLY; + +/** + * Login registered account information transfer body email + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Schema(description = "sign up body") +public class SignUpDto { + + @Schema(description = "name", example = "user", accessMode = READ_ONLY) + @NotBlank(message = "Name can not null") + @Size(max = 10, message = "name max length 10") + private String name; + + @Schema(description = "user email", example = "xxx@xxx.com", accessMode = READ_ONLY) + @NotBlank(message = "email can not null") + private String email; + + @Schema(description = "password", example = "123456", accessMode = READ_ONLY) + @NotBlank(message = "password can not null") + @Size(min = 6,max = 16, message = "password max length 16,min 6") + private String password; + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/TemplateDto.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/TemplateDto.java new file mode 100644 index 00000000000..d63128dda45 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/TemplateDto.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DTO; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@ToString +@AllArgsConstructor +@NoArgsConstructor +public class TemplateDto { + + private int id=0; + private String name=""; + private String description=""; + private String descriptionVersion=""; + private int latest=0; + private String currentVersion=""; + private String user=""; + private int userId=0; + private String category=""; + private int categoryId=0; + private int download=0; + private int star=0; + private String create_time=""; + private String update_time=""; + private int off_shelf=0; + private int is_del=0; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/TokenDto.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/TokenDto.java new file mode 100644 index 00000000000..47686db0318 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/dto/TokenDto.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.DTO; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Refresh token dto + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Schema(description = "Request refresh token transfer body") +public class TokenDto { + + @Schema(description = "token") + @NotBlank(message = "token can not null") + private String token; + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Category.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Category.java new file mode 100644 index 00000000000..9da3ab446f0 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Category.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.entity; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Entity +@Table(name = "category") +public class Category implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(nullable = false) + @Schema(description = "Category Name") + private String name; + + @Column(nullable = false) + private String description; + + @Column(nullable = false,name = "create_time") + private String createTime; + + @Column(nullable = false, name = "update_time") + private String updateTime; + + @Column(nullable = false,name = "is_del") + @Schema(description = "Delete Mark") + private Integer isDel; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Star.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Star.java new file mode 100644 index 00000000000..b4fd1f99cae --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Star.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.entity; + +import java.io.Serializable; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Table(name = "star") +@Entity +public class Star implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "user_id",nullable = false) + private Integer userId; + + @Column(name = "template_id",nullable = false) + private Integer templateId; + + @Column(name = "version_id",nullable = false) + private Integer versionId; + + @Column(name = "create_time",nullable = false) + private String createTime; + + @Column(name = "is_del",nullable = false) + @Schema(description = "Cancel flag, 0 means normal, 1 means cancel") + private Integer isDel; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Tag.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Tag.java new file mode 100644 index 00000000000..60a41f96657 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Tag.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.entity; + +import java.io.Serializable; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Entity +@Table(name = "tag") +public class Tag implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Schema(description = "Tag name, no duplication allowed, modification allowed") + @Column(nullable = false) + private String name; + + @Column(nullable = false) + private String description; + + @Column(name = "create_time",nullable = false) + private String createTime; + + @Column(name = "is_del",nullable = false) + private Integer isDel; + + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Template.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Template.java new file mode 100644 index 00000000000..a572f1dfb5e --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Template.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.entity; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Entity +@Table(name="template") +public class Template implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id=1; + + @Column(nullable = false) + @Schema(description = "Template name, cannot be modified, but can be repeated") + private String name; + + @Column(nullable = false) + private String description; + + @Column(nullable = false) + @Schema(description = "Latest version id") + private Integer latest; + + @Column(nullable = false) + @Schema(description = "user id") + private Integer user; + + @Column(nullable = false) + @Schema(description = "Template category id") + private Integer category; + + @Column(nullable = false) + @Schema(description = "Template-tag table id") + private Integer tag; + + @Column(nullable = false) + @Schema(description = "Downloads") + private Integer download; + + @Column(nullable = false) + private Integer star; + + @Column(nullable = false,name = "create_time") + private String createTime; + + @Column(nullable = false, name = "update_time") + private String updateTime; + + @Column(nullable = false,name="off_shelf") + @Schema(description = "Delisting mark, 0 means normal, 1 means delisting") + private Integer offShelf; + + @Column(nullable = false,name = "is_del") + @Schema(description = "Delete mark, 0 means normal, 1 means delete") + private Integer isDel; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/TemplateTag.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/TemplateTag.java new file mode 100644 index 00000000000..24477198e7f --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/TemplateTag.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.entity; + +import java.io.Serializable; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Entity +@Table(name = "template_tag") +public class TemplateTag implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(nullable = false) + @Schema(description = "template id") + private Integer template; + + @Column(nullable = false) + @Schema(description = "tag id") + private Integer tag; + + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/User.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/User.java new file mode 100644 index 00000000000..b517b4d0a14 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/User.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.entity; + +import java.io.Serializable; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Entity +@Table(name = "user") +public class User implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(nullable = false) + @Schema(description = "Username, can be repeated, can be modified") + private String name; + + @Column(nullable = false) + @Schema(description = "Email, can be modified, used for user login") + private String email; + + @Column(nullable = false,name = "create_time") + private String createTime; + + @Column(nullable = false,name = "log_off_time") + @Schema(description = "Logout time, if not logged out it is 0, if logged out it is time") + private String logOffTime; + + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Version.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Version.java new file mode 100644 index 00000000000..3f983a764d2 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/model/entity/Version.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.model.entity; + +import java.io.Serializable; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +@Entity +@Table(name = "version") +public class Version implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(nullable = false) + @Schema(description = "template id") + private Integer template; + + @Column(nullable = false) + @Schema(description = "Version name, modification is not allowed") + private String version; + + @Column(nullable = false) + @Schema(description = "Version description") + private String description; + + @Column(nullable = false) + private Integer download; + + @Column(nullable = false) + private Integer star; + + @Column(nullable = false,name = "create_time") + private String createTime; + + @Column(nullable = false,name = "off_shelf") + private Integer offShelf; + + @Column(nullable = false,name = "is_del") + private Integer isDel; + + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/AccountService.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/AccountService.java new file mode 100644 index 00000000000..e189064f41d --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/AccountService.java @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service; + +import com.usthe.sureness.provider.SurenessAccount; +import org.apache.hertzbeat.templatehub.model.DTO.LoginDto; +import org.apache.hertzbeat.templatehub.model.DTO.RefreshTokenResponse; +import org.apache.hertzbeat.templatehub.model.DTO.SignUpDto; + +import javax.naming.AuthenticationException; +import java.util.List; +import java.util.Map; + +/** + * Account service + */ +public interface AccountService { + /** + * Verify account validity, username and password + * @param account account info + * @return success-true failed-false + */ + boolean authenticateAccount(LoginDto account); + + /** + * Get all roles owned by this username account, combine them into string list + * @param username account username + * @return role-string eg role1,role3,role2 + */ + List loadAccountRoles(String username); + + /** + * register account + * @param account account info + * @return success-true failed-false + */ + boolean registerAccount(SignUpDto account); + + /** + * Determine whether the account already exists + * @param account account info + * @return exist-true no-false + */ + boolean isAccountExist(LoginDto account); + + /** + * Account password login to obtain associated user information + * @param loginDto loginDto + * @return token info + * @throws AuthenticationException when authentication is failed + */ + Map authGetToken(LoginDto loginDto) throws AuthenticationException; + + /** + * Load the account information by username + * @param username account username + * @return account + */ + SurenessAccount loadAccount(String username); + + /** + * authority User Role by username and roleId + * @param appId account username + * @param roleId roleId + * @return success-true failed-false + */ + boolean authorityUserRole(String appId, Long roleId); + + /** + * delete authority User Role by username and roleId + * @param appId account username + * @param roleId roleId + * @return success-true failed-false + */ + boolean deleteAuthorityUserRole(String appId, Long roleId); + + /** + * Use refresh TOKEN to re-acquire TOKEN + * @param refreshToken refreshToken + * @return token and refresh token + * @throws Exception failed to refresh + */ + RefreshTokenResponse refreshToken(String refreshToken) throws Exception; +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/CategoryService.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/CategoryService.java new file mode 100644 index 00000000000..fa3c8426c89 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/CategoryService.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service; + +import org.apache.hertzbeat.templatehub.model.DO.CategoryDO; +import org.springframework.data.domain.Page; + +import java.util.List; + +public interface CategoryService { + + boolean addCategory(String categoryName,String categoryDescription,String nowTime); + + boolean modifyCategory(int id, String categoryName,String categoryDescription,String nowTime); + + boolean deleteCategory(int id); + + List getAllCategoryByIsDel(int isDel); + + Page getPageByIsDel(int isDel, int page, int size); +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/FileStorageService.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/FileStorageService.java new file mode 100644 index 00000000000..5df5a0cd491 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/FileStorageService.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service; + +import org.springframework.core.io.Resource; +import org.springframework.web.multipart.MultipartFile; + +public interface FileStorageService { + + void uploadFile(MultipartFile file, String path, String fileName); + + void deleteFile(String path, String fileName); + + Resource downloadFile(String path, String fileName); +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/ResourceService.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/ResourceService.java new file mode 100644 index 00000000000..7587d639a17 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/ResourceService.java @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service; + +import org.apache.hertzbeat.templatehub.model.DO.AuthResourceDO; +import org.springframework.data.domain.Page; + +import java.util.List; +import java.util.Optional; +import java.util.Set; + +/** + * @author tomsun28 + * @date 00:13 2019-08-01 + */ +public interface ResourceService { + + /** + * add uri resource + * @param authResource resource + * @return success-true failed-false + */ + boolean addResource(AuthResourceDO authResource); + + /** + * Determine whether the resource already exists + * @param authResource resource + * @return existed-true no-false + */ + boolean isResourceExist(AuthResourceDO authResource); + + /** + * update uri resource + * @param authResource resource + * @return success-true failed-false + */ + boolean updateResource(AuthResourceDO authResource); + + /** + * delete uri resource + * @param resourceId resource ID + * @return success-true no existed-false + */ + boolean deleteResource(Long resourceId); + + /** + * get all resources + * @return resource list + */ + Optional> getAllResource(); + + /** + * get resource by page + * @param currentPage current page + * @param pageSize page size + * @return Page of resource + */ + Page getPageResource(Integer currentPage, Integer pageSize); + + /** + * get enabled resource-path-role eg: /api/v2/host===post===[role2,role3,role4] + * @return resource-path-role + */ + Set getAllEnableResourcePath(); + + /** + * get disable resource-path-role eg: /api/v2/host===post===[role2,role3,role4] + * @return resource-path-role + */ + Set getAllDisableResourcePath(); +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/RoleService.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/RoleService.java new file mode 100644 index 00000000000..ba56707ff12 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/RoleService.java @@ -0,0 +1,105 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service; + +import org.apache.hertzbeat.templatehub.model.DO.AuthResourceDO; +import org.apache.hertzbeat.templatehub.model.DO.AuthRoleDO; +import org.springframework.data.domain.Page; + +import java.util.List; +import java.util.Optional; + +public interface RoleService { + + Long getRoleIdByCode(String code); + + /** + * Determine whether the role already exists + * @param authRole role + * @return existed-true no-false + */ + boolean isRoleExist(AuthRoleDO authRole); + + /** + * add role + * @param authRole role + * @return add success-true failed-false + */ + boolean addRole(AuthRoleDO authRole); + + /** + * update role + * @param authRole role + * @return success-true failed-false + */ + boolean updateRole(AuthRoleDO authRole); + + /** + * delete role + * @param roleId role ID + * @return success-true failed-false + */ + boolean deleteRole(Long roleId); + + /** + * get all role list + * @return role list + */ + Optional> getAllRole(); + + /** + * get roles page + * @param currentPage current page + * @param pageSize page size + * @return Page of roles + */ + Page getPageRole(Integer currentPage, Integer pageSize); + + /** + * get pageable resources which this role owned + * @param roleId role ID + * @param currentPage current page + * @param pageSize page size + * @return Page of resources + */ + Page getPageResourceOwnRole(Long roleId, Integer currentPage, Integer pageSize); + + /** + * get pageable resources which this role not owned + * @param roleId role ID + * @param currentPage current page + * @param pageSize page size + * @return Page of resources + */ + Page getPageResourceNotOwnRole(Long roleId, Integer currentPage, Integer pageSize); + + /** + * authority this resource to this role + * @param roleId role ID + * @param resourceId resource ID + */ + void authorityRoleResource(Long roleId, Long resourceId); + + /** + * unAuthority this resource in this role + * @param roleId role ID + * @param resourceId resource ID + */ + void deleteAuthorityRoleResource(Long roleId, Long resourceId); + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/StarService.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/StarService.java new file mode 100644 index 00000000000..438e7cf8c7e --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/StarService.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service; + +import org.apache.hertzbeat.templatehub.model.DO.TemplateDO; +import org.springframework.data.domain.Page; + +import java.util.List; + +public interface StarService { + int starTemplate(int userId, int templateId, String nowTime); + + boolean assertTemplateIdIsStarByUser(int userId, int templateId); + + List getTemplateByUserStar(int userId, int isDel); + + Page getPageByUserStar(int userId, int isCancel, int isDel, int offShelf, int page, int size); + + Boolean cancelStarByUser(int userId, int templateId); +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/TagService.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/TagService.java new file mode 100644 index 00000000000..19f91f273de --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/TagService.java @@ -0,0 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service; + +public interface TagService{ + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/TemplateService.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/TemplateService.java new file mode 100644 index 00000000000..ac806ed10d1 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/TemplateService.java @@ -0,0 +1,106 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service; + +import org.apache.hertzbeat.templatehub.model.DO.TemplateDO; +import org.apache.hertzbeat.templatehub.model.DTO.Message; +import org.apache.hertzbeat.templatehub.model.DTO.TemplateDto; +import org.springframework.core.io.Resource; +import org.springframework.data.domain.Page; +import org.springframework.http.ResponseEntity; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +public interface TemplateService { + + int getCountByIsDelAndOffShelf(int isDel, int offShelf); + + boolean upload(TemplateDto templateDto, MultipartFile file); + + Page getPageByUserId(int userId, int page, int size); + + Page getPageByCategory(List categoryIdList, int isDel, int orderOption, int page, int size); + + Page getPageByOption(String nameLike, List categoryIdList, int isDel, int orderOption, int page, int size); + + Page getPageByIsDelOrderByCreateTimeDesc(int isDel, int page, int size); + + Page getPageByIsDelOrderByCreateTimeAsc(int isDel, int page, int size); + + Page getPageByIsDelOrderByUpdateTimeDesc(int isDel, int page, int size); + + Page getPageByIsDelOrderByUpdateTimeAsc(int isDel, int page, int size); + + Page getPageByIsDelOrderByStarDesc(int isDel, int page, int size); + + Page getPageByIsDelOrderByStarAsc(int isDel, int page, int size); + + Page getPageByIsDelOrderByDownloadDesc(int isDel, int page, int size); + + Page getPageByIsDelOrderByDownloadAsc(int isDel, int page, int size); + + Page getPageByNameLike(String name, int isDel, int orderOption, int page, int size); + + Page getTemplatesByPage(int isDel, int page, int size); + + Resource downloadTemplate(int ownerId, int templateId, String version, int versionId); + + boolean deleteTemplate(int ownerId, int templateId, String version); + + TemplateDO getTemplate(int templateId); + + boolean starTemplate(int templateId); + + boolean cancelStarTemplate(int templateId); + + List getAllTemplates(); + +// @Deprecated +// List getTemplatesByCategory(int categoryId); +// +// @Deprecated +// List getByIsDelOrderByCreateTimeDesc(int isDel); +// +// @Deprecated +// List getByIsDelOrderByCreateTimeAsc(int isDel); +// +// @Deprecated +// List getByIsDelOrderByUpdateTimeDesc(int isDel); +// +// @Deprecated +// List getPageByIsDelOrderByUpdateTimeAsc(int isDel); +// +// @Deprecated +// List getByIsDelOrderByStarDesc(int isDel); +// +// @Deprecated +// List getByIsDelOrderByStarAsc(int isDel); +// +// @Deprecated +// List getByIsDelOrderByDownloadDesc(int isDel); +// +// @Deprecated +// List getByIsDelOrderByDownloadAsc(int isDel); +// +// @Deprecated +// List getTemplatesByNameLike(String name); +// +// @Deprecated +// ResponseEntity>> getAllTemplatesByUserId(int userId); +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/TemplateTagService.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/TemplateTagService.java new file mode 100644 index 00000000000..58fe9695c4e --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/TemplateTagService.java @@ -0,0 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service; + +public interface TemplateTagService { + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/UserService.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/UserService.java new file mode 100644 index 00000000000..ff986c146a0 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/UserService.java @@ -0,0 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service; + +public interface UserService { + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/VersionService.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/VersionService.java new file mode 100644 index 00000000000..68555ce70aa --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/VersionService.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service; + +import org.apache.hertzbeat.templatehub.model.DO.VersionDO; +import org.apache.hertzbeat.templatehub.model.DTO.TemplateDto; +import org.apache.hertzbeat.templatehub.model.DO.TemplateDO; +import org.springframework.data.domain.Page; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +public interface VersionService { + + boolean insertVersion(VersionDO versionDO, TemplateDO templateDO); + + List getVersions(int templateId); + + Page getVersionPageByTemplate(int templateId, int isDel, int page, int size); + + boolean upload(TemplateDto templateDto, MultipartFile file); + + VersionDO getVersion(int versionId); + + VersionDO getLatestVersion(int templateId); + +// boolean startVersion(int versionId); + +// int cancelStarVersion(int versionId); +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/AccountServiceImpl.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/AccountServiceImpl.java new file mode 100644 index 00000000000..232ee3823a8 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/AccountServiceImpl.java @@ -0,0 +1,216 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service.impl; + +import com.usthe.sureness.provider.DefaultAccount; +import com.usthe.sureness.provider.SurenessAccount; +import com.usthe.sureness.util.JsonWebTokenUtil; +import com.usthe.sureness.util.Md5Util; +import com.usthe.sureness.util.SurenessCommonUtil; +import io.jsonwebtoken.Claims; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.hertzbeat.templatehub.model.DAO.AuthUserDao; +import org.apache.hertzbeat.templatehub.model.DAO.AuthUserRoleBindDao; +import org.apache.hertzbeat.templatehub.model.DTO.LoginDto; +import org.apache.hertzbeat.templatehub.model.DTO.RefreshTokenResponse; +import org.apache.hertzbeat.templatehub.model.DO.AuthUserDO; +import org.apache.hertzbeat.templatehub.model.DO.AuthUserRoleBindDO; +import org.apache.hertzbeat.templatehub.model.DTO.SignUpDto; +import org.apache.hertzbeat.templatehub.service.AccountService; +import org.apache.hertzbeat.templatehub.util.JsonUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Service; + +import javax.naming.AuthenticationException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +/** + * Implementation of Account service + */ +@Service +@Order(value = Ordered.HIGHEST_PRECEDENCE) +@Slf4j +public class AccountServiceImpl implements AccountService { + /** + * Token validity time in seconds + */ + private static final long PERIOD_TIME = 3600L; + + @Autowired + private AuthUserDao authUserDao; + + @Autowired + private AuthUserRoleBindDao userRoleBindDao; + + @Override + public Map authGetToken(LoginDto loginDto) throws AuthenticationException { + SurenessAccount account = loadAccount(loginDto.getIdentifier()); + if (account == null || StringUtils.isBlank(account.getPassword())) { + throw new AuthenticationException("Incorrect Account or Password"); + } else { + String password = loginDto.getCredential(); + if (StringUtils.isNotBlank(account.getSalt())) { + password = Md5Util.md5(password + account.getSalt()); + } + if (!account.getPassword().equals(password)) { + throw new AuthenticationException("Incorrect Account or Password"); + } + if (account.isDisabledAccount() || account.isExcessiveAttempts()) { + throw new AuthenticationException("Expired or Illegal Account"); + } + } + // Get the roles the user has - rbac + List roles = account.getOwnRoles(); + // Issue TOKEN + String issueToken = JsonWebTokenUtil.issueJwt(loginDto.getIdentifier(), PERIOD_TIME, roles); + Map customClaimMap = new HashMap<>(1); + customClaimMap.put("refresh", true); + String issueRefresh = JsonWebTokenUtil.issueJwt(loginDto.getIdentifier(), PERIOD_TIME << 5, customClaimMap); + Map resp = new HashMap<>(2); + resp.put("token", issueToken); + resp.put("refreshToken", issueRefresh); + resp.put("role", JsonUtil.toJson(roles)); + + Optional authUserByEmail = this.authUserDao.findAuthUserByEmail(loginDto.getIdentifier()); + resp.put("id", String.valueOf(authUserByEmail.map(AuthUserDO::getId).orElse(null))); + + return resp; + } + + @Override + public boolean authenticateAccount(LoginDto account) { + Optional authUserOptional = authUserDao.findAuthUserByEmail(account.getIdentifier()); + if (authUserOptional.isEmpty()) { + return false; + } + AuthUserDO authUser = authUserOptional.get(); + String password = account.getCredential(); + if (password == null) { + return false; + } + if (Objects.nonNull(authUser.getSalt())) { + // md5 with salt + password = Md5Util.md5(password + authUser.getSalt()); + + } + return authUser.getPassword().equals(password); + } + + @Override + public List loadAccountRoles(String username) { + return authUserDao.findAccountOwnRoles(username); + } + + @Override + public boolean registerAccount(SignUpDto account) { + if (isAccountExist(new LoginDto((byte) 1, account.getEmail(), account.getPassword()))) { + return false; + } + String salt = SurenessCommonUtil.getRandomString(6); + String password = Md5Util.md5(account.getPassword() + salt); + AuthUserDO authUser = AuthUserDO.builder().name(account.getName()) + .password(password).salt(salt).status(1).build(); + + authUser.setCreateTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + authUser.setUpdateTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + authUser.setLogOffTime("0"); + authUser.setEmail(account.getEmail()); + + authUserDao.save(authUser); + return true; + } + + @Override + public boolean isAccountExist(LoginDto account) { + Optional authUserOptional = authUserDao.findAuthUserByEmail(account.getIdentifier()); + return authUserOptional.isPresent(); + } + + @Override + public SurenessAccount loadAccount(String username) { + Optional authUserOptional = authUserDao.findAuthUserByEmail(username); + if (authUserOptional.isPresent()) { + AuthUserDO authUser = authUserOptional.get(); + DefaultAccount.Builder accountBuilder = DefaultAccount.builder(username) + .setPassword(authUser.getPassword()) + .setSalt(authUser.getSalt()) + .setDisabledAccount(1 != authUser.getStatus()) + .setExcessiveAttempts(2 == authUser.getStatus()); + List roles = loadAccountRoles(username); + if (roles != null) { + accountBuilder.setOwnRoles(roles); + } + return accountBuilder.build(); + } else { + return null; + } + } + + @Override + public RefreshTokenResponse refreshToken(String refreshToken) throws Exception { + Claims claims = JsonWebTokenUtil.parseJwt(refreshToken); + String userId = String.valueOf(claims.getSubject()); + boolean isRefresh = claims.get("refresh", Boolean.class); + if (StringUtils.isBlank(userId) || !isRefresh) { + throw new AuthenticationException("Illegal Refresh Token"); + } + SurenessAccount account = loadAccount(userId); + if (account == null) { + throw new AuthenticationException("Not Exists This Token Mapping Account"); + } + List roles = account.getOwnRoles(); + String issueToken = issueToken(userId, roles, PERIOD_TIME); + String issueRefresh = issueToken(userId, roles, PERIOD_TIME << 5); + return new RefreshTokenResponse(issueToken, issueRefresh); + } + + private String issueToken(String userId, List roles, long expirationMillis) { + Map customClaimMap = new HashMap<>(1); + customClaimMap.put("refresh", true); + return JsonWebTokenUtil.issueJwt(userId, expirationMillis, roles, customClaimMap); + } + + @Override + public boolean authorityUserRole(String appId, Long roleId) { + Optional optional = authUserDao.findAuthUserByEmail(appId); + if (optional.isEmpty()) { + return false; + } + Long userId = optional.get().getId(); + AuthUserRoleBindDO userRoleBindDO = AuthUserRoleBindDO.builder().userId(userId).roleId(roleId).build(); + + userRoleBindDao.save(userRoleBindDO); + return true; + } + + @Override + public boolean deleteAuthorityUserRole(String appId, Long roleId) { + Optional optional = authUserDao.findAuthUserByEmail(appId); + if (optional.isEmpty()) { + return false; + } + Long userId = optional.get().getId(); + userRoleBindDao.deleteRoleResourceBind(roleId, userId); + return true; + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/CategoryServiceImpl.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/CategoryServiceImpl.java new file mode 100644 index 00000000000..947b7fd6715 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/CategoryServiceImpl.java @@ -0,0 +1,97 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service.impl; + +import lombok.extern.slf4j.Slf4j; +import org.apache.hertzbeat.templatehub.model.DAO.CategoryDao; +import org.apache.hertzbeat.templatehub.model.DAO.TemplateDao; +import org.apache.hertzbeat.templatehub.model.DO.CategoryDO; +import org.apache.hertzbeat.templatehub.model.DO.TemplateDO; +import org.apache.hertzbeat.templatehub.service.CategoryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@Slf4j +@Service +public class CategoryServiceImpl implements CategoryService { + + @Autowired + CategoryDao categoryDao; + + @Autowired + TemplateDao templateDao; + + @Override + public boolean addCategory(String categoryName, String categoryDescription, String nowTime) { + + CategoryDO save = categoryDao.save(new CategoryDO(0, categoryName, categoryDescription, nowTime, nowTime, 0)); + + return save.getId() > 0; + } + + @Override + public boolean modifyCategory(int id, String categoryName, String categoryDescription, String nowTime) { + + Optional byId = categoryDao.findById(id); + + if(byId.isEmpty()){ + return false; + } + CategoryDO categoryDO = byId.get(); + categoryDO.setName(categoryName); + categoryDO.setDescription(categoryDescription); + categoryDO.setUpdateTime(nowTime); + + categoryDao.save(categoryDO); + + return true; + } + + @Override + public boolean deleteCategory(int id) { + + List ids = new ArrayList<>(); + ids.add(id); + Page templates = templateDao.queryPageByCategory(ids, 0, PageRequest.of(0,1)); + + if(templates.getTotalElements()!=0){ + return false; + } + int i = categoryDao.deleteByIsDel(id); + return i > 0; + } + + @Override + public List getAllCategoryByIsDel(int isDel) { + return categoryDao.findAllByIsDel(isDel); + } + + @Override + public Page getPageByIsDel(int isDel, int page, int size) { + + Pageable pageable = PageRequest.of(page, size); + return categoryDao.findAllByIsDel(isDel,pageable); + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/DataConflictException.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/DataConflictException.java new file mode 100644 index 00000000000..7c429656aa6 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/DataConflictException.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service.impl; + + +/** + * data conflict exception + * @author tomsun28 + * @date 22:55 2020-04-27 + */ +public class DataConflictException extends RuntimeException { + + public DataConflictException(String msg) { + super(msg); + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/LocalFileStorageServiceImpl.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/LocalFileStorageServiceImpl.java new file mode 100644 index 00000000000..82f0f076ecf --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/LocalFileStorageServiceImpl.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service.impl; + +import org.apache.hertzbeat.templatehub.service.FileStorageService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +@Service +public class LocalFileStorageServiceImpl implements FileStorageService { + + @Value("${local.storage.path}") + private String storagePath; + + @Override + public void uploadFile(MultipartFile file, String path, String fileName) { + try { + // Ensure the directory exists + File directory = new File(storagePath+"/"+path); + if (!directory.exists()) { + boolean mkdir = directory.mkdirs(); + if(!mkdir){ + throw new RuntimeException("Unable to create directory"); + } + } + + // Define the file path + File localFile = new File(directory,fileName); + try (FileOutputStream outputStream = new FileOutputStream(localFile)) { + outputStream.write(file.getBytes()); + } + + // Return the file URL (local file path in this case) +// return localFile.toURI().toString(); + } catch (IOException e) { + throw new RuntimeException("Error uploading file to local storage", e); + } + } + + @Override + public void deleteFile(String path, String fileName) { + File file = new File(storagePath + "/" + path + "/" + fileName); + if (file.exists() && !file.delete()) { + throw new RuntimeException("Error deleting file from local storage"); + } + } + + @Override + public Resource downloadFile(String path, String fileName) { + File file = new File(storagePath + "/" + path + "/" + fileName); + if (file.exists()) { + return new FileSystemResource(file); + } else { + throw new RuntimeException("File not found"); + } + } +} + diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/MinIOFileStorageServiceImpl.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/MinIOFileStorageServiceImpl.java new file mode 100644 index 00000000000..3937b68c414 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/MinIOFileStorageServiceImpl.java @@ -0,0 +1,176 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service.impl; + +import io.minio.*; +import io.minio.errors.MinioException; +import lombok.extern.slf4j.Slf4j; +import org.apache.hertzbeat.templatehub.service.FileStorageService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.InputStreamResource; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +@Slf4j +@Service +public class MinIOFileStorageServiceImpl implements FileStorageService { + + @Value("${minio.endpoint}") + private String minioEndpoint; + + @Value("${minio.accessKey}") + private String accessKey; + + @Value("${minio.secretKey}") + private String secretKey; + + @Value("${minio.bucketName}") + private String bucketName; + + private final MinioClient minioClient; + + public MinIOFileStorageServiceImpl( + @Value("${minio.endpoint}") String minioEndpoint, + @Value("${minio.accessKey}") String accessKey, + @Value("${minio.secretKey}") String secretKey) { + this.minioClient = MinioClient.builder() + .endpoint(minioEndpoint) + .credentials(accessKey, secretKey) + .build(); + } + + /** + * uploadFile + * + * @param file Upload file information + * @param path Storage path in MinIO + */ + @Override + public void uploadFile(MultipartFile file, String path, String fileName) { + try { + + if(minioEndpoint==null||accessKey==null||secretKey==null){ + throw new IllegalArgumentException("Minio configuration error"); + } + + // Check if the bucket exists, if not, create it + boolean isExist = minioClient.bucketExists( + BucketExistsArgs.builder() + .bucket(bucketName) + .build()); + if (!isExist) { + minioClient.makeBucket( + MakeBucketArgs.builder() + .bucket(bucketName) + .build()); + } + + // Upload files to bucket + String contentType = file.getContentType(); + InputStream inputStream = file.getInputStream(); + long size = file.getSize(); + + minioClient.putObject( + PutObjectArgs.builder() + .bucket(bucketName) + .stream(inputStream, size, -1) + .contentType(contentType) + .object(path+"/"+fileName) + .bucket(bucketName) + .build()); + } catch (MinioException | NoSuchAlgorithmException | InvalidKeyException | IOException e) { + throw new RuntimeException("File upload error:", e); + } +// return path+"/"+fileName; + } + + @Override + public void deleteFile(String path, String fileName) { + try { + minioClient.removeObject(RemoveObjectArgs.builder() + .bucket(bucketName) + .object(path + "/" + fileName) + .build()); + } catch (Exception e) { + throw new RuntimeException("Error deleting file from MinIO", e); + } + } + + @Override + public Resource downloadFile(String path, String fileName) { + + Boolean isExist = checkFileIsExist(bucketName, path + "/" + fileName); + + if(!isExist){ + return null; + } + + try { + InputStream inputStream = minioClient.getObject(GetObjectArgs.builder() + .bucket(bucketName) + .object(path + "/" + fileName) + .build()); + return new InputStreamResource(inputStream); + } catch (MinioException | IOException e) { + throw new RuntimeException("Error downloading file from MinIO", e); + } catch (NoSuchAlgorithmException | InvalidKeyException e) { + throw new RuntimeException(e); + } + } + + public Boolean checkFileIsExist(String bucketName, String objectName) { + try { + minioClient.statObject( + StatObjectArgs.builder().bucket(bucketName).object(objectName).build() + ); + } catch (Exception e) { + return false; + } + return true; + } + + +// /** +// * Retrieve file external links +// * @param path File Path +// * @param expires Expiration time unit: days +// * @return url +// */ +// @Override +// public String getDownloadUrl(String path, Integer expires) throws Exception { +// +// MinioClient minioClient =MinioClient.builder() +// .endpoint(minioEndpoint) +// .credentials(accessKey,secretKey) +// .build(); +// +// GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder() +// .method(Method.GET) +// .expiry(expires, TimeUnit.DAYS) +// .object(path) +// .bucket(bucketName) +// .build(); +// return minioClient.getPresignedObjectUrl(args); +// } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/ResourceServiceImpl.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/ResourceServiceImpl.java new file mode 100644 index 00000000000..768138d1584 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/ResourceServiceImpl.java @@ -0,0 +1,109 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service.impl; + +import org.apache.hertzbeat.templatehub.model.DAO.AuthResourceDao; +import org.apache.hertzbeat.templatehub.model.DO.AuthResourceDO; +import org.apache.hertzbeat.templatehub.service.ResourceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Example; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; + +/** + * @author tomsun28 + * @date 13:09 2019-08-04 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class ResourceServiceImpl implements ResourceService { + + @Autowired + private AuthResourceDao authResourceDao; + + @Override + public boolean addResource(AuthResourceDO authResource) { + if (isResourceExist(authResource)) { + return false; + } else { + authResourceDao.saveAndFlush(authResource); + return true; + } + } + + @Override + public boolean isResourceExist(AuthResourceDO authResource) { + AuthResourceDO resource = AuthResourceDO.builder() + .uri(authResource.getUri()) + .method(authResource.getMethod()) + .build(); + Example example = Example.of(resource); + return authResourceDao.exists(example); + } + + @Override + public boolean updateResource(AuthResourceDO authResource) { + if (authResourceDao.existsById(authResource.getId())) { + authResourceDao.saveAndFlush(authResource); + return true; + } else { + return false; + } + } + + @Override + public boolean deleteResource(Long resourceId) { + if (authResourceDao.existsById(resourceId)) { + authResourceDao.deleteById(resourceId); + return true; + } else { + return false; + } + } + + @Override + public Optional> getAllResource() { + List resourceList = authResourceDao.findAll(); + return Optional.of(resourceList); + } + + @Override + public Page getPageResource(Integer currentPage, Integer pageSize) { + PageRequest pageRequest = PageRequest.of(currentPage, pageSize); + return authResourceDao.findAll(pageRequest); + } + + @Override + public Set getAllEnableResourcePath() { + Optional> optional = authResourceDao.getEnableResourcePathRoleData(); + return optional.>map(HashSet::new).orElseGet(() -> new HashSet<>(0)); + } + + @Override + public Set getAllDisableResourcePath() { + Optional> optional = authResourceDao.getDisableResourcePathData(); + return optional.>map(HashSet::new).orElseGet(() -> new HashSet<>(0)); + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/RoleServiceImpl.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/RoleServiceImpl.java new file mode 100644 index 00000000000..3cfed6c28cd --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/RoleServiceImpl.java @@ -0,0 +1,149 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service.impl; + +import com.usthe.sureness.matcher.TreePathRoleMatcher; +import org.apache.hertzbeat.templatehub.model.DAO.AuthResourceDao; +import org.apache.hertzbeat.templatehub.model.DAO.AuthRoleDao; +import org.apache.hertzbeat.templatehub.model.DAO.AuthRoleResourceBindDao; +import org.apache.hertzbeat.templatehub.model.DO.AuthResourceDO; +import org.apache.hertzbeat.templatehub.model.DO.AuthRoleDO; +import org.apache.hertzbeat.templatehub.model.DO.AuthRoleResourceBindDO; +import org.apache.hertzbeat.templatehub.service.RoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Example; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Optional; + +/** + * @author tomsun28 + * @date 13:10 2019-08-04 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class RoleServiceImpl implements RoleService { + + @Autowired + private AuthRoleDao authRoleDao; + + @Autowired + private AuthResourceDao authResourceDao; + + @Autowired + private AuthRoleResourceBindDao roleResourceBindDao; + + @Autowired + private TreePathRoleMatcher treePathRoleMatcher; + + @Override + public Long getRoleIdByCode(String code) { + Long l = authRoleDao.queryIdByCode(code); + if (l == null) { + return null; + } + return l; + } + + @Override + public boolean isRoleExist(AuthRoleDO authRole) { + AuthRoleDO role = AuthRoleDO.builder() + .name(authRole.getName()).code(authRole.getCode()).build(); + return authRoleDao.exists(Example.of(role)); + } + + @Override + public boolean addRole(AuthRoleDO authRole) { + if (isRoleExist(authRole)) { + return false; + } else { + authRoleDao.saveAndFlush(authRole); + return true; + } + } + + @Override + public boolean updateRole(AuthRoleDO authRole) { + if (authRoleDao.existsById(authRole.getId())) { + authRoleDao.saveAndFlush(authRole); + return true; + } else { + return false; + } + } + + @Override + public boolean deleteRole(Long roleId) { + if (authRoleDao.existsById(roleId)) { + authRoleDao.deleteById(roleId); + return true; + } else { + return false; + } + } + + @Override + public Optional> getAllRole() { + List roleList = authRoleDao.findAll(); + return Optional.of(roleList); + } + + @Override + public Page getPageRole(Integer currentPage, Integer pageSize) { + PageRequest pageRequest = PageRequest.of(currentPage, pageSize); + return authRoleDao.findAll(pageRequest); + } + + @Override + public Page getPageResourceOwnRole(Long roleId, Integer currentPage, Integer pageSize) { + PageRequest pageRequest = PageRequest.of(currentPage, pageSize, Sort.Direction.ASC, "id"); + return authResourceDao.findRoleOwnResource(roleId, pageRequest); + } + + @Override + public Page getPageResourceNotOwnRole(Long roleId, Integer currentPage, Integer pageSize) { + PageRequest pageRequest = PageRequest.of(currentPage, pageSize, Sort.Direction.ASC, "id"); + return authResourceDao.findRoleNotOwnResource(roleId, pageRequest); + } + + @Override + public void authorityRoleResource(Long roleId, Long resourceId) { + // Determine whether this resource and role exist + if (!authRoleDao.existsById(roleId) || !authResourceDao.existsById(resourceId)) { + throw new DataConflictException("roleId or resourceId not exist"); + } + // insert it in database, if existed the unique index will work + AuthRoleResourceBindDO bind = AuthRoleResourceBindDO + .builder().roleId(roleId).resourceId(resourceId).build(); + roleResourceBindDao.saveAndFlush(bind); + // refresh resource path data tree + treePathRoleMatcher.rebuildTree(); + } + + @Override + public void deleteAuthorityRoleResource(Long roleId, Long resourceId) { + roleResourceBindDao.deleteRoleResourceBind(roleId, resourceId); + // refresh resource path data tree + treePathRoleMatcher.rebuildTree(); + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/StarServiceImpl.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/StarServiceImpl.java new file mode 100644 index 00000000000..e1f98e33b5e --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/StarServiceImpl.java @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service.impl; + +import lombok.extern.slf4j.Slf4j; +import org.apache.hertzbeat.templatehub.model.DAO.StarDao; +import org.apache.hertzbeat.templatehub.model.DAO.TemplateDao; +import org.apache.hertzbeat.templatehub.model.DAO.VersionDao; +import org.apache.hertzbeat.templatehub.model.DO.StarDO; +import org.apache.hertzbeat.templatehub.model.DO.TemplateDO; +import org.apache.hertzbeat.templatehub.service.StarService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Service +public class StarServiceImpl implements StarService { + + @Autowired + StarDao starDao; + + @Autowired + VersionDao versionDao; + @Autowired + private TemplateDao templateDao; + + @Override + public int starTemplate(int userId, int templateId, String nowTime) { + + StarDO starDO = new StarDO(); + starDO.setId(0); + starDO.setUserId(userId); + starDO.setTemplateId(templateId); + starDO.setCreateTime(nowTime); + starDO.setIsDel(0); + + StarDO save = starDao.save(starDO); + if(save.getId()==0) { + return 0; + } + + return 1; + } + + @Override + public boolean assertTemplateIdIsStarByUser(int userId, int templateId) { + return starDao.existsStarByTemplateIdAndUserIdAndIsDel(templateId,userId,0); + } + + @Override + public List getTemplateByUserStar(int userId, int isDel) { + return starDao.queryTemplateIdByUserAndIsDel(userId, isDel); + } + + @Override + public Page getPageByUserStar(int userId, int isCancel, int isDel, int offShelf, int page, int size) { + Pageable pageable= PageRequest.of(page, size); + return templateDao.queryPageByUserStar(userId, isCancel, isDel, offShelf,pageable); + } + + @Override + public Boolean cancelStarByUser(int userId, int templateId) { + int i = starDao.cancelByUser(1, userId, templateId, 0); + return i != 0; + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/TagServiceImpl.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/TagServiceImpl.java new file mode 100644 index 00000000000..111d77fc63c --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/TagServiceImpl.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service.impl; + +import org.apache.hertzbeat.templatehub.service.TagService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class TagServiceImpl implements TagService { + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/TemplateServiceImpl.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/TemplateServiceImpl.java new file mode 100644 index 00000000000..86b6b78ebbe --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/TemplateServiceImpl.java @@ -0,0 +1,375 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service.impl; + +import org.apache.hertzbeat.templatehub.exception.HertzbeatTemplateHubException; +import org.apache.hertzbeat.templatehub.model.DAO.TemplateDao; +import org.apache.hertzbeat.templatehub.model.DAO.VersionDao; +import org.apache.hertzbeat.templatehub.model.DO.TemplateDO; +import org.apache.hertzbeat.templatehub.model.DO.VersionDO; +import org.apache.hertzbeat.templatehub.model.DTO.Message; +import org.apache.hertzbeat.templatehub.model.DTO.TemplateDto; +import org.apache.hertzbeat.templatehub.service.FileStorageService; +import org.apache.hertzbeat.templatehub.service.TemplateService; +import lombok.extern.slf4j.Slf4j; +import org.apache.hertzbeat.templatehub.service.VersionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.Resource; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +@Slf4j +@Service +public class TemplateServiceImpl implements TemplateService { + + @Autowired + VersionService versionService; + + @Autowired + TemplateDao templateDao; + + @Autowired + VersionDao versionDao; + + private final FileStorageService fileStorageService; + + @Autowired + public TemplateServiceImpl(FileStorageService fileStorageService) { + this.fileStorageService = fileStorageService; + } + + @Transactional + @Override + public boolean upload(TemplateDto templateDto, MultipartFile file) { + + TemplateDO templateDO =new TemplateDO(); + templateDO.setId(0); + templateDO.setName(templateDto.getName()); + templateDO.setDescription(templateDto.getDescription()); + templateDO.setLatest(0); + templateDO.setUser(templateDto.getUserId()); + templateDO.setCategoryId(templateDto.getCategoryId()); + templateDO.setTag(0); + templateDO.setDownload(0); + templateDO.setStar(0); + templateDO.setCreateTime(templateDto.getCreate_time()); + templateDO.setUpdateTime(templateDto.getUpdate_time()); + templateDO.setOffShelf(0); + templateDO.setIsDel(0); + + VersionDO versionDO =new VersionDO(); + versionDO.setId(0); + versionDO.setVersion(templateDto.getCurrentVersion()); + versionDO.setDescription(templateDto.getDescriptionVersion()); + versionDO.setDownload(0); + versionDO.setStar(0); + versionDO.setCreateTime(templateDto.getCreate_time()); + versionDO.setOffShelf(0); + versionDO.setIsDel(0); + + int count = templateDao.queryCountByNameAndUser(templateDO.getName(), templateDO.getUser()); + if(count>=1){ + int id = templateDao.queryId(templateDO.getName(), templateDO.getUser()); + templateDO.setId(id); + int versionCount = versionDao.queryCountByTemplateAndVersion(id, templateDto.getCurrentVersion()); + if(versionCount>=1){ + throw new HertzbeatTemplateHubException("You already have a same version"); + } + }else{ + TemplateDO templateDONew = templateDao.save(templateDO); + if(templateDONew.getId()==0){ + throw new HertzbeatTemplateHubException("Template data insertion error"); + } + templateDO = templateDONew; + } + + boolean isInsertVersion = versionService.insertVersion(versionDO, templateDO); + + if(!isInsertVersion){ + throw new HertzbeatTemplateHubException("Version information insertion error"); + } + + String path=templateDto.getUserId()+"/"+ templateDO.getId(); + + try { + fileStorageService.uploadFile(file, path, templateDto.getCurrentVersion()+".yml"); + } catch (RuntimeException e) { + throw new RuntimeException(e); + } + + return true; + } + + @Override + public int getCountByIsDelAndOffShelf(int isDel, int offShelf) { + + return templateDao.queryCountByIsDelAndOffShelf(isDel, offShelf); + } + + @Override + public Page getPageByUserId(int userId, int page, int size) { + + Pageable pageable = PageRequest.of(page, size); + return templateDao.queryPageByUserId(userId, 0,pageable); + } + + @Override + public Page getPageByCategory(List categoryIdList, int isDel, int orderOption, int page, int size) { + + Pageable pageable = PageRequest.of(page, size); + + if(orderOption==1){ + return templateDao.queryPageByCategory(categoryIdList, isDel, pageable); + }else{ + return templateDao.queryPageByCategory(categoryIdList, isDel, pageable); + } + } + + @Override + public Page getPageByOption(String nameLike, List categoryIdList, int isDel, int orderOption, int page, int size) { + Pageable pageable = PageRequest.of(page, size); + + if(nameLike.isEmpty()){ + if(orderOption==1){ + return templateDao.queryPageByCategory(categoryIdList, isDel, pageable); + }else{ + return templateDao.queryPageByCategory(categoryIdList, isDel, pageable); + } + }else{ + if(orderOption==1){ + return templateDao.queryPageByNameLikeAndCategory(nameLike, categoryIdList, isDel, pageable); + }else{ + return templateDao.queryPageByNameLikeAndCategory(nameLike, categoryIdList, isDel, pageable); + } + } + + } + + @Override + public Page getPageByIsDelOrderByCreateTimeDesc(int isDel, int page, int size) { + + Pageable pageable = PageRequest.of(page, size); + return templateDao.queryPageByIsDelOrderByCreateTimeDesc(isDel,pageable); + } + + @Override + public Page getPageByIsDelOrderByCreateTimeAsc(int isDel, int page, int size) { + + Pageable pageable = PageRequest.of(page, size); + return templateDao.queryPageByIsDelOrderByCreateTimeAsc(isDel,pageable); + } + + @Override + public Page getPageByIsDelOrderByUpdateTimeDesc(int isDel, int page, int size) { + + Pageable pageable = PageRequest.of(page, size); + return templateDao.queryPageByIsDelOrderByUpdateTimeDesc(isDel,pageable); + } + + @Override + public Page getPageByIsDelOrderByUpdateTimeAsc(int isDel, int page, int size) { + + Pageable pageable = PageRequest.of(page, size); + return templateDao.queryPageByIsDelOrderByUpdateTimeAsc(isDel,pageable); + } + + @Override + public Page getPageByIsDelOrderByStarDesc(int isDel, int page, int size) { + + Pageable pageable = PageRequest.of(page, size); + return templateDao.queryPageByIsDelOrderByStarDesc(isDel,pageable); + } + + @Override + public Page getPageByIsDelOrderByStarAsc(int isDel, int page, int size) { + + Pageable pageable = PageRequest.of(page, size); + return templateDao.queryPageByIsDelOrderByStarAsc(isDel, pageable); + } + + @Override + public Page getPageByIsDelOrderByDownloadDesc(int isDel, int page, int size) { + + Pageable pageable = PageRequest.of(page, size); + return templateDao.queryPageByIsDelOrderByDownloadDesc(isDel,pageable); + } + + @Override + public Page getPageByIsDelOrderByDownloadAsc(int isDel, int page, int size) { + Pageable pageable = PageRequest.of(page, size); + return templateDao.queryPageByIsDelOrderByDownloadAsc(isDel, pageable); + } + + @Override + public Page getPageByNameLike(String name, int isDel, int orderOption, int page, int size) { + + Pageable pageable = PageRequest.of(page, size); + + if(orderOption==1){ + return templateDao.queryPageByNameLike(isDel, name,pageable); + }else{ + return templateDao.queryPageByNameLike(isDel, name,pageable); + } + } + + @Override + public Page getTemplatesByPage(int isDel, int page, int size) { + Pageable pageable = PageRequest.of(page, size); + return templateDao.queryPageByIsDel(isDel, pageable); + } + + @Override + @Transactional + public Resource downloadTemplate(int ownerId, int templateId, String version, int versionId) { + + if(templateId==0|| Objects.equals(version, "") ||ownerId==0) throw new IllegalArgumentException("id error"); + + String path=ownerId+"/"+templateId; + String fileName=version+".yml"; + + Resource file = fileStorageService.downloadFile(path, fileName); + if(file==null) return null; + + int isOk = templateDao.downloadUpdate(1,templateId); + if(isOk==0) throw new HertzbeatTemplateHubException("Template download error"); + + int isOk2 = versionDao.downloadUpdate(1,versionId); + if(isOk2==0) throw new HertzbeatTemplateHubException("Template download error"); + + return file; + } + + @Override + public boolean deleteTemplate(int ownerId, int templateId, String version) { + + String path=ownerId+"/"+templateId; + fileStorageService.deleteFile(path,version+".yml"); + return true; + } + + @Override + public TemplateDO getTemplate(int templateId) { + return templateDao.findTemplateById(templateId); + } + + @Override + public boolean starTemplate(int templateId) { + Optional byId = templateDao.findById(templateId); + if(byId.isEmpty()){ + return false; + } + TemplateDO templateDO = byId.get(); + templateDO.setStar(templateDO.getStar() + 1); + templateDao.save(templateDO); + + return true; + } + + @Override + public boolean cancelStarTemplate(int templateId) { + int i = templateDao.cancelStarTemplate(1, templateId); + return i == 1; + } + + @Override + public List getAllTemplates() { + + return templateDao.queryAllByIsDel(0); + } + +// @Deprecated +// @Override +// public ResponseEntity>> getAllTemplatesByUserId(int userId) { +// +// List templateDOS = templateDao.queryByUserId(userId, 0); +// +// return ResponseEntity.ok(Message.success(templateDOS)); +// } +// +// @Deprecated +// @Override +// public List getTemplatesByCategory(int categoryId) { +// +// return templateDao.queryByCategory(categoryId, 0); +// } +// +// @Deprecated +// @Override +// public List getByIsDelOrderByCreateTimeDesc(int isDel) { +// +// return templateDao.queryAllByIsDelOrderByCreateTimeDesc(isDel); +// } +// +// @Deprecated +// @Override +// public List getByIsDelOrderByCreateTimeAsc(int isDel) { +// return templateDao.queryAllByIsDelOrderByCreateTimeAsc(isDel); +// } +// +// @Deprecated +// @Override +// public List getPageByIsDelOrderByUpdateTimeAsc(int isDel) { +// return templateDao.getByIsDelOrderByUpdateTimeAsc(isDel); +// } +// +// @Deprecated +// @Override +// public List getByIsDelOrderByUpdateTimeDesc(int isDel) { +// return templateDao.getByIsDelOrderByUpdateTimeDesc(isDel); +// } +// +// @Deprecated +// @Override +// public List getTemplatesByNameLike(String name) { +// +// return templateDao.queryByNameLike(0, name); +// } +// +// @Deprecated +// @Override +// public List getByIsDelOrderByDownloadAsc(int isDel) { +// return templateDao.getByIsDelOrderByDownloadAsc(isDel); +// } +// +// @Deprecated +// @Override +// public List getByIsDelOrderByStarAsc(int isDel) { +// return templateDao.getByIsDelOrderByStarAsc(isDel); +// } +// +// @Deprecated +// @Override +// public List getByIsDelOrderByDownloadDesc(int isDel) { +// return templateDao.getByIsDelOrderByDownloadDesc(isDel); +// } +// +// @Deprecated +// @Override +// public List getByIsDelOrderByStarDesc(int isDel) { +// return templateDao.getByIsDelOrderByStarDesc(isDel); +// } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/TemplateTagServiceImpl.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/TemplateTagServiceImpl.java new file mode 100644 index 00000000000..ed625ee3ba9 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/TemplateTagServiceImpl.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service.impl; + +import org.apache.hertzbeat.templatehub.service.TemplateTagService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class TemplateTagServiceImpl implements TemplateTagService { + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/UserServiceImpl.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/UserServiceImpl.java new file mode 100644 index 00000000000..810869a7f65 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/UserServiceImpl.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service.impl; + +import org.apache.hertzbeat.templatehub.service.UserService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class UserServiceImpl implements UserService { + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/VersionServiceImpl.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/VersionServiceImpl.java new file mode 100644 index 00000000000..ea4dca84467 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/service/impl/VersionServiceImpl.java @@ -0,0 +1,172 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.service.impl; + +import org.apache.hertzbeat.templatehub.exception.HertzbeatTemplateHubException; +import org.apache.hertzbeat.templatehub.model.DAO.StarDao; +import org.apache.hertzbeat.templatehub.model.DAO.TemplateDao; +import org.apache.hertzbeat.templatehub.model.DAO.VersionDao; +import org.apache.hertzbeat.templatehub.model.DO.VersionDO; +import org.apache.hertzbeat.templatehub.model.DTO.TemplateDto; +import org.apache.hertzbeat.templatehub.model.DO.TemplateDO; +import org.apache.hertzbeat.templatehub.service.FileStorageService; +import org.apache.hertzbeat.templatehub.service.VersionService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Optional; + +@Slf4j +@Service +public class VersionServiceImpl implements VersionService { + + @Autowired + VersionDao versionDao; + + @Autowired + TemplateDao templateDao; + + @Autowired + StarDao starDao; + + private final FileStorageService fileStorageService; + + @Autowired + public VersionServiceImpl(FileStorageService fileStorageService) { + this.fileStorageService = fileStorageService; + } + + @Override + public boolean insertVersion(VersionDO versionDO, TemplateDO templateDO) { + + versionDO.setTemplateId(templateDO.getId()); + + VersionDO insertVersionDO = versionDao.save(versionDO); + if(insertVersionDO.getId()==0){ + return false; + } + + //Update the latest version in the template file data table + int versionId= insertVersionDO.getId(); + templateDO.setLatest(versionId); + int updateTemplate = templateDao.updateTemplate(templateDO.getLatest(), templateDO.getId()); + + return updateTemplate == 1; + } + + @Deprecated + @Override + public List getVersions(int templateId) { + + return versionDao.queryVersionByTemplateId(templateId); + } + + @Override + public Page getVersionPageByTemplate(int templateId, int isDel, int page, int size) { + + Pageable pageable = PageRequest.of(page, size); + + return versionDao.queryPageByTemplateId(templateId, isDel, pageable); + } + + @Transactional + @Override + public boolean upload(TemplateDto templateDto, MultipartFile file) { + //Generate Template entity + TemplateDO templateDO =templateDao.findTemplateById(templateDto.getId()); + + //Generate version entity + VersionDO versionDO =new VersionDO(); + versionDO.setId(0); + versionDO.setVersion(templateDto.getCurrentVersion()); + versionDO.setDescription(templateDto.getDescriptionVersion()); + versionDO.setDownload(0); + versionDO.setCreateTime(templateDto.getCreate_time()); + versionDO.setOffShelf(0); + versionDO.setIsDel(0); + + + //Check the version table of this template to see if there are any duplicate versions + int versionCount = versionDao.queryCountByTemplateAndVersion(templateDO.getId(), templateDto.getCurrentVersion()); + if(versionCount>=1){ + throw new HertzbeatTemplateHubException("same version"); + } + + //Insert version information + boolean isInsertVersion = insertVersion(versionDO, templateDO); + + if(!isInsertVersion){ + throw new HertzbeatTemplateHubException("Version information insertion error"); + } + + String path=templateDto.getUserId()+"/"+ templateDO.getId(); + + try { + fileStorageService.uploadFile(file, path, templateDto.getCurrentVersion()+".yml"); + } catch (RuntimeException e) { + throw new HertzbeatTemplateHubException(e.getMessage()); + } + + return true; + } + + @Override + public VersionDO getVersion(int versionId) { + Optional byId = versionDao.findById(versionId); + return byId.orElse(null); + } + + @Override + public VersionDO getLatestVersion(int templateId) { + return versionDao.queryLatestByTemplate(templateId); + } + +// @Override +// public boolean startVersion(int versionId) { +// +// Optional byId = versionDao.findById(versionId); +// if(byId.isEmpty()){ +// return false; +// } +// Version version = byId.get(); +// version.setStar(version.getStar() + 1); +// versionDao.save(version); +// +// return true; +// } + +// @Override +// public int cancelStarVersion(int versionId) { +// Optional byId = versionDao.findById(versionId); +// if(byId.isEmpty()){ +// return 0; +// } +// int i = versionDao.cancelStarVersion(1, versionId); +// if(i!=1){ +// return 0; +// } +// return byId.get().getTemplateId(); +// } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/SurenessFilterExample.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/SurenessFilterExample.java new file mode 100644 index 00000000000..e220d00bb50 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/SurenessFilterExample.java @@ -0,0 +1,224 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.sureness; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.usthe.sureness.mgt.SurenessSecurityManager; +import com.usthe.sureness.processor.exception.*; +import com.usthe.sureness.subject.SubjectSum; +import com.usthe.sureness.util.SurenessContextHolder; +import jakarta.servlet.annotation.WebFilter; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.apache.hertzbeat.templatehub.sureness.processor.RefreshExpiredTokenException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import jakarta.servlet.*; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.io.PrintWriter; +import java.lang.reflect.Field; +import java.util.Collections; +import java.util.Map; + +@Order(1) +@Component +@WebFilter(filterName = "SurenessFilterExample", urlPatterns = "/*", asyncSupported = true) +public class SurenessFilterExample implements Filter { + + /** logger **/ + private static final Logger logger = LoggerFactory.getLogger(SurenessFilterExample.class); + + @Override + public void init(FilterConfig filterConfig) throws ServletException { +// logger.info("SurenessFilterExample init"); + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { +// logger.info("SurenessFilterExample doFilter"); + + HttpServletRequest request = (HttpServletRequest) servletRequest; + HttpServletResponse response = (HttpServletResponse) servletResponse; + + if ("OPTIONS".equals(request.getMethod())){ + response.setStatus(200); + response.setHeader("Access-Control-Allow-Origin","*"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization, authorization,x-requested-with, *"); + + try { + //获取过滤器链中的filters属性 + Field filtersField = filterChain.getClass().getDeclaredField("filters"); + //反射设置属性可达 + filtersField.setAccessible(true); + //获取filters属性值 + FilterConfig[] filters = (FilterConfig[]) filtersField.get(filterChain); + //跳过过滤器个数记录 + int k = 0; + //遍历所有过滤器 + for (int i = 0; i < filters.length; i++) { + if (filters[i] != null) { + //获取过滤器filterDef属性 + Field filterDefField = filters[i].getClass().getDeclaredField("filterDef"); + filterDefField.setAccessible(true); + //获取filter的class + Field filterClassField = filterDefField.get(filters[i]).getClass().getDeclaredField("filterClass"); + filterClassField.setAccessible(true); + String filterClass = (String) filterClassField.get(filterDefField.get(filters[i])); + String FILTER_REFERENCE1 = "com.usthe.sureness.configuration.SurenessJakartaServletFilter"; + String FILTER_REFERENCE2 = "org.apache.tomcat.websocket.server.WsFilter"; + //跳过指定过滤器处理 + if (FILTER_REFERENCE1.equals(filterClass)||FILTER_REFERENCE2.equals(filterClass)) { + filters[i] = null; + k++; + break; + } + //属性可达关闭 + filterClassField.setAccessible(false); + filterDefField.setAccessible(false); + } + } + //过滤器数组重新赋值,调整移除指定过滤器后过滤器数组 + int index = 0; + for (int i = 0; i < filters.length; i++) { + if (index == 0 && filters[i] == null) { + index = i; + } else if (index != 0 && filters[i] != null) { + filters[index] = filters[i]; + filters[i] = null; + i = index; + index = 0; + } + } + //n值重新赋值 + filtersField.setAccessible(false); + Field n = filterChain.getClass().getDeclaredField("n"); + n.setAccessible(true); + n.set(filterChain, n.getInt(filterChain) - k); + n.setAccessible(false); + logger.info("DemoOncePerRequestFilter end solving"); + } catch (Exception e) { + logger.error("DemoOncePerRequestFilter doFilter exception ", e); + } + + try { + // if ok, doFilter and add subject in request + filterChain.doFilter(servletRequest, servletResponse); + } finally { + SurenessContextHolder.clear(); + } + }else if(request.getRequestURI().contains("template/localFileUpload")){ + response.setStatus(200); + response.setHeader("Access-Control-Allow-Origin","*"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Accept, Authorization,authorization"); + try { + // if ok, doFilter and add subject in request + filterChain.doFilter(servletRequest, servletResponse); + } finally { + SurenessContextHolder.clear(); + } + } + else{ + try { + SubjectSum subject = SurenessSecurityManager.getInstance().checkIn(servletRequest); + // You can consider using SurenessContextHolder to bind subject in threadLocal + // if bind, please remove it when end + if (subject != null) { + SurenessContextHolder.bindSubject(subject); + } + } catch (IncorrectCredentialsException | UnknownAccountException | ExpiredCredentialsException e1) { + logger.debug("this request account info is illegal, {}", e1.getMessage()); + responseWrite(ResponseEntity + .status(HttpStatus.UNAUTHORIZED).body("Username or password is incorrect or expired"), servletResponse); + return; + } catch (DisabledAccountException | ExcessiveAttemptsException e2 ) { + logger.debug("the account is disabled, {}", e2.getMessage()); + responseWrite(ResponseEntity + .status(HttpStatus.UNAUTHORIZED).body("Account is disabled"), servletResponse); + return; + } catch (RefreshExpiredTokenException e4) { + logger.debug("this account credential token is expired, return refresh value"); + Map refreshTokenMap = Collections.singletonMap("refresh-token", e4.getMessage()); + responseWrite(ResponseEntity + .status(HttpStatus.UNAUTHORIZED).body(refreshTokenMap), servletResponse); + return; + } catch (UnauthorizedException e5) { + logger.debug("this account can not access this resource, {}", e5.getMessage()); + responseWrite(ResponseEntity + .status(HttpStatus.FORBIDDEN) + .body("This account has no permission to access this resource"), servletResponse); + return; + } catch (RuntimeException e) { + logger.error("other exception happen: ", e); + responseWrite(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(), + servletResponse); + return; + } + try { + // if ok, doFilter and add subject in request + filterChain.doFilter(servletRequest, servletResponse); + } finally { + SurenessContextHolder.clear(); + } + } + + } + + @Override + public void destroy() { +// logger.info("SurenessFilterExample destroy"); + } + + /** + * write response json data + * @param content content + * @param response response + */ + private void responseWrite(ResponseEntity content, ServletResponse response) { + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/json;charset=utf-8"); + ((HttpServletResponse)response).setStatus(content.getStatusCodeValue()); + content.getHeaders().forEach((key, value) -> + ((HttpServletResponse) response).addHeader(key, value.get(0))); + try (PrintWriter printWriter = response.getWriter()) { + if (content.getBody() != null) { + if (content.getBody() instanceof String) { + printWriter.write(content.getBody().toString()); + } else { + ObjectMapper objectMapper = new ObjectMapper(); + printWriter.write(objectMapper.writeValueAsString(content.getBody())); + } + } else { + printWriter.flush(); + } + } catch (IOException e) { + logger.error("responseWrite response error: ", e); + } + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/processor/RefreshExpiredTokenException.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/processor/RefreshExpiredTokenException.java new file mode 100644 index 00000000000..79b8698f08f --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/processor/RefreshExpiredTokenException.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.sureness.processor; + +import com.usthe.sureness.processor.exception.SurenessAuthenticationException; + +/** + * refresh token message + * @author tomsun28 + * @date 2020-12-03 23:29 + */ +public class RefreshExpiredTokenException extends SurenessAuthenticationException { + public RefreshExpiredTokenException(String message) { + super(message); + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/provider/DatabaseAccountProvider.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/provider/DatabaseAccountProvider.java new file mode 100644 index 00000000000..e59536fe30f --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/provider/DatabaseAccountProvider.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.sureness.provider; + +import com.usthe.sureness.provider.SurenessAccount; +import com.usthe.sureness.provider.SurenessAccountProvider; +import org.apache.hertzbeat.templatehub.service.AccountService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * the provider provides account info + * load account info from database + * @author tomsun28 + * @date 22:44 2020-03-02 + */ +@Component +public class DatabaseAccountProvider implements SurenessAccountProvider { + + @Autowired + AccountService accountService; + + @Override + public SurenessAccount loadAccount(String appId) { + return accountService.loadAccount(appId); + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/provider/DatabasePathTreeProvider.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/provider/DatabasePathTreeProvider.java new file mode 100644 index 00000000000..aa45e8aef15 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/sureness/provider/DatabasePathTreeProvider.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.sureness.provider; + +import com.usthe.sureness.matcher.PathTreeProvider; +import com.usthe.sureness.util.SurenessCommonUtil; +import org.apache.hertzbeat.templatehub.service.ResourceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Set; + +/** + * ths provider provides path resources + * load sureness config resource form database + * @author tomsun28 + * @date 16:00 2019-08-04 + */ +@Component +public class DatabasePathTreeProvider implements PathTreeProvider { + + @Autowired + private ResourceService resourceService; + + @Override + public Set providePathData() { + // 从数据库中读取出path信息,取出所有状态为1,即正常的path信息 + Set pathSet = SurenessCommonUtil.attachContextPath(getContextPath(), resourceService.getAllEnableResourcePath()); + return pathSet; + + } + + @Override + public Set provideExcludedResource() { + // 从数据库中读取出path信息,取出所有状态为9,即禁用的path信息 + Set exlResourceSet = SurenessCommonUtil.attachContextPath(getContextPath(), resourceService.getAllDisableResourcePath()); + return exlResourceSet; + } + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/Base62Util.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/Base62Util.java new file mode 100644 index 00000000000..739e7ed00ab --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/Base62Util.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.util; + +public final class Base62Util { + private static final String BASE62 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + + private Base62Util() { + } + + public static boolean isBase62(String str) { + if (str == null || str.isEmpty()) { + return false; + } + + for (char c : str.toCharArray()) { + if (BASE62.indexOf(c) == -1) { + return false; + } + } + + return true; + } + + /** + * Long to short + */ + public static String idToShortKey(long id) { + StringBuilder stringBuilder = new StringBuilder(); + if(id==0){ + stringBuilder.append("0"); + return stringBuilder.toString(); + } + while (id > 0) { + stringBuilder.append(BASE62.charAt((int) (id % 62))); + id = id / 62; + } + + return stringBuilder.reverse().toString(); + } + + public static long shortKeyToId(String shortKey) { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(shortKey); + while (stringBuilder.length() < 6) { + stringBuilder.append(0); + } + long id = 0; + for (int i = 0; i < shortKey.length(); i++) { + id = id * 62 + BASE62.indexOf(shortKey.charAt(i)); + } + + return id; + } +} + diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/Base64Util.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/Base64Util.java new file mode 100644 index 00000000000..a44d7633ea8 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/Base64Util.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.util; + +import java.util.Base64; + +/** + * base64 util + */ +public final class Base64Util { + + private Base64Util() { + } + + public static boolean isBase64(String base64) { + + if (base64 == null || base64.isEmpty()) { + return false; + } + + try { + return Base64.getDecoder().decode(base64) != null; + } catch (Exception e) { + return false; + } + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/JsonUtil.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/JsonUtil.java new file mode 100644 index 00000000000..c1c05355ff6 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/JsonUtil.java @@ -0,0 +1,122 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.StringUtils; + +import javax.annotation.concurrent.ThreadSafe; + +/** + * json util + */ +@ThreadSafe +@Slf4j +public final class JsonUtil { + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + private JsonUtil() { + } + + static { + OBJECT_MAPPER + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false) + .registerModule(new JavaTimeModule()); + } + + public static String toJson(Object source) { + if (source == null) { + return null; + } + try { + return OBJECT_MAPPER.writeValueAsString(source); + } catch (JsonProcessingException e) { + log.error(e.getMessage(), e); + return null; + } + } + + public static T fromJson(String jsonStr, Class clazz) { + if (!StringUtils.hasText(jsonStr)) { + return null; + } + try { + return OBJECT_MAPPER.readValue(jsonStr, clazz); + } catch (Exception e) { + log.error(e.getMessage(), e); + return null; + } + } + + public static T fromJson(String jsonStr, TypeReference type) { + if (!StringUtils.hasText(jsonStr)) { + return null; + } + try { + return OBJECT_MAPPER.readValue(jsonStr, type); + } catch (Exception e) { + log.error(e.getMessage(), e); + return null; + } + } + + public static JsonNode fromJson(String jsonStr) { + if (!StringUtils.hasText(jsonStr)) { + return null; + } + try { + return OBJECT_MAPPER.readTree(jsonStr); + } catch (Exception e) { + log.error(e.getMessage(), e); + return null; + } + } + + /** + * check if the string is a json string + * @param jsonStr json string + * @return true if the string is a json string + */ + + + public static boolean isJsonStr(String jsonStr) { + if (jsonStr == null || jsonStr.trim().isEmpty()) { + return false; + } + jsonStr = jsonStr.trim(); + if (!(jsonStr.startsWith("{") && jsonStr.endsWith("}")) + && !(jsonStr.startsWith("[") && jsonStr.endsWith("]"))) { + return false; + } + try { + OBJECT_MAPPER.readTree(jsonStr); + return true; + } catch (Exception ignored) { + return false; + } + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/ResponseUtil.java b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/ResponseUtil.java new file mode 100644 index 00000000000..578919e2d5c --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/java/org/apache/hertzbeat/templatehub/util/ResponseUtil.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.util; + +import org.apache.hertzbeat.templatehub.constants.CommonConstants; +import org.apache.hertzbeat.templatehub.model.DTO.Message; +import org.springframework.http.ResponseEntity; + +import javax.naming.AuthenticationException; + +/** + * A tool which make the restful response be easy to use + */ +public class ResponseUtil { + public static ResponseEntity> handle(Supplier supplier) { + try { + T result = supplier.get(); + return ResponseEntity.ok(Message.success(result)); + } catch (Exception e) { + byte err = CommonConstants.FAIL_CODE; + if (e.getClass().equals(AuthenticationException.class)) { + err = CommonConstants.LOGIN_FAILED_CODE; + } + return ResponseEntity.ok(Message.fail(err, e.getMessage())); + } + } + + public static ResponseEntity> handle(Runnable runner) { + try { + runner.run(); + return ResponseEntity.ok(Message.success()); + } catch (Exception e) { + byte err = CommonConstants.FAIL_CODE; + if (e.getClass().equals(AuthenticationException.class)) { + err = CommonConstants.LOGIN_FAILED_CODE; + } + return ResponseEntity.ok(Message.fail(err, e.getMessage())); + } + } + + /** + * Supplier interface for getting result + */ + public interface Supplier { + + /** + * Gets a result. + * + * @return a result + */ + T get() throws E; + } + + /** + * Runnable interface for running + */ + public interface Runnable { + + /** + * Run target method. + */ + void run() throws Exception; + } +} diff --git a/template-marketplace/hertzbeat-template-hub/src/main/resources/application.yml b/template-marketplace/hertzbeat-template-hub/src/main/resources/application.yml new file mode 100644 index 00000000000..b3de912b5a2 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/resources/application.yml @@ -0,0 +1,65 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + +server: + address: localhost + port: 8080 + servlet: + context-path: /api + +spring: + application: + name: hetzbeat-template-hub + datasource: + url: jdbc:mysql://localhost:3306/hertzbeat_template_hub + username: root + password: root + driver-class-name: com.mysql.cj.jdbc.Driver + jpa: + properties: + hibernate: + hbm2ddl: + auto: update + format_sql: true + show-sql: true + open-in-view: true + +file: + storage: + type: minio + # type: local + +address: http://localhost:8080 + +local: + storage: + path: /path/to/local/storage + +minio: + endpoint: http://127.0.0.1:9000 + accessKey: CMULmgc3rfbnhmOCpXci + secretKey: Mw9wnljHl4RtVBGcipcmDTArdCx75lAwaMJeLXGC + bucketName: hertzbeat-data + + +sureness: + container: jakarta_servlet + auths: + - jwt + jwt: + secret: 'CyaFv0bwq2Eik0jdrKUtsA6bx3sDJeFV643R + LnfKefTjsIfJLBa2YkhEqEGtcHDTNe4CU6+9 + 8tVt4bisXQ13r4N0oxhUZRd3M6EByXIO+SV5 + dKhaX0cs3OC5lCxq20yhmUea6H6JIpSE2Rwp' \ No newline at end of file diff --git a/template-marketplace/hertzbeat-template-hub/src/main/resources/sureness.yml b/template-marketplace/hertzbeat-template-hub/src/main/resources/sureness.yml new file mode 100644 index 00000000000..0c29771226a --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/main/resources/sureness.yml @@ -0,0 +1,29 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + +## -- sureness.yml account source -- ## + +# config the resource restful api that need auth protection, base rbac +# rule: api===method===role +# eg: /api/v1/source1===get===[admin] means /api/v2/host===post support role[admin] access. +# eg: /api/v1/source2===get===[] means /api/v1/source2===get can not access by any role. +resourceRole: + + + +# config the resource restful api that need bypass auth protection +# rule: api===method +# eg: /api/v1/source3===get means /api/v1/source3===get can be access by anyone, no need auth. +excludedResource: diff --git a/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/HertzbeatTemplateDOHubApplicationTests.java b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/HertzbeatTemplateDOHubApplicationTests.java new file mode 100644 index 00000000000..6e7ce38e02f --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/HertzbeatTemplateDOHubApplicationTests.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class HertzbeatTemplateDOHubApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/HertzbeatTemplateHubApplicationTests.java b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/HertzbeatTemplateHubApplicationTests.java new file mode 100644 index 00000000000..2d587800245 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/HertzbeatTemplateHubApplicationTests.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class HertzbeatTemplateHubApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/config/FileStorageConfigTest.java b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/config/FileStorageConfigTest.java new file mode 100644 index 00000000000..6aaa6ed6b13 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/config/FileStorageConfigTest.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.config; + +import org.junit.jupiter.api.Test; +public class FileStorageConfigTest { + + @Test + public void testFileStorageServiceWithMinio() { + } + + @Test + public void testFileStorageServiceWithLocal() { + } + + @Test + public void testFileStorageServiceWithInvalidType() { + } +} \ No newline at end of file diff --git a/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/CategoryControllerTest.java b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/CategoryControllerTest.java new file mode 100644 index 00000000000..add62d15e83 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/CategoryControllerTest.java @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import org.apache.hertzbeat.templatehub.model.entity.Category; +import org.apache.hertzbeat.templatehub.service.CategoryService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; + +/** + * Test case for {@link CategoryController} + */ +@ExtendWith(MockitoExtension.class) +class CategoryControllerTest { + + @InjectMocks + private CategoryController categoryController; + + @Mock + private CategoryService categoryService; + + private MockMvc mockMvc; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + this.mockMvc = standaloneSetup(categoryController).build(); + } + @Test + public void testAddCategory_ValidInput() throws Exception { + + when(categoryService.addCategory(any(String.class), any(String.class), any(String.class))).thenReturn(true); + + mockMvc.perform(post("/category/upload/testName") + .param("description", "Test description") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(0)); + } + + @Test + public void testAddCategory_InvalidInput() throws Exception { + mockMvc.perform(post("/category/upload/{name}","testName") + .param("description", "")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testModifyCategory_ValidInput() throws Exception { + // Mock the category service method + when(categoryService.modifyCategory(anyInt(), any(String.class), any(String.class), any(String.class))).thenReturn(true); + + // Perform the request + mockMvc.perform(post("/category/modify/1") + .param("name", "Updated Name") + .param("description", "Updated description") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(0)); + } + + @Test + public void testModifyCategory_InvalidInput() throws Exception { + mockMvc.perform(post("/category/modify/0") + .param("name", "") + .param("description", "")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testDeleteCategory_ValidId() throws Exception { + when(categoryService.deleteCategory(anyInt())).thenReturn(true); + + mockMvc.perform(delete("/category/delete/1")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(0)); + } + + @Test + public void testDeleteCategory_InvalidId() throws Exception { + mockMvc.perform(delete("/category/delete/0")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testGetAllCategory_ValidInput() throws Exception { + List categories = Collections.singletonList(new Category()); + when(categoryService.getAllCategoryByIsDel(anyInt())).thenReturn(categories); + + mockMvc.perform(get("/category/all/0")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(0)) + .andExpect(jsonPath("$.data").isArray()); + } + + @Test + public void testGetAllCategory_InvalidInput() throws Exception { + mockMvc.perform(get("/category/all/2")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testGetCategoryPageByIsDel_ValidInput() throws Exception { + List categories = new ArrayList<>(); + categories.add(new Category()); + Page categoryPage = new PageImpl<>(categories); + + when(categoryService.getPageByIsDel(anyInt(), anyInt(), anyInt())).thenReturn(categoryPage); + + mockMvc.perform(get("/category/page/isDel/0?page=0&size=10")); + + verify(categoryService,times(1)).getPageByIsDel(anyInt(), anyInt(), anyInt()); + } + + @Test + public void testGetCategoryPageByIsDel_InvalidInput() throws Exception { + mockMvc.perform(get("/category/page/isDel/2?page=-1&size=0")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + +} \ No newline at end of file diff --git a/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/CategoryDOControllerTest.java b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/CategoryDOControllerTest.java new file mode 100644 index 00000000000..08c01d5c7e3 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/CategoryDOControllerTest.java @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import org.apache.hertzbeat.templatehub.model.DO.CategoryDO; +import org.apache.hertzbeat.templatehub.service.CategoryService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; + +/** + * Test case for {@link CategoryController} + */ +@ExtendWith(MockitoExtension.class) +class CategoryDOControllerTest { + + @InjectMocks + private CategoryController categoryController; + + @Mock + private CategoryService categoryService; + + private MockMvc mockMvc; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + this.mockMvc = standaloneSetup(categoryController).build(); + } + @Test + public void testAddCategory_ValidInput() throws Exception { + + when(categoryService.addCategory(any(String.class), any(String.class), any(String.class))).thenReturn(true); + + mockMvc.perform(post("/category/upload/testName") + .param("description", "Test description") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(0)); + } + + @Test + public void testAddCategory_InvalidInput() throws Exception { + mockMvc.perform(post("/category/upload/{name}","testName") + .param("description", "")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testModifyCategory_ValidInput() throws Exception { + // Mock the category service method + when(categoryService.modifyCategory(anyInt(), any(String.class), any(String.class), any(String.class))).thenReturn(true); + + // Perform the request + mockMvc.perform(post("/category/modify/1") + .param("name", "Updated Name") + .param("description", "Updated description") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(0)); + } + + @Test + public void testModifyCategory_InvalidInput() throws Exception { + mockMvc.perform(post("/category/modify/0") + .param("name", "") + .param("description", "")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testDeleteCategory_ValidId() throws Exception { + when(categoryService.deleteCategory(anyInt())).thenReturn(true); + + mockMvc.perform(delete("/category/delete/1")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(0)); + } + + @Test + public void testDeleteCategory_InvalidId() throws Exception { + mockMvc.perform(delete("/category/delete/0")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testGetAllCategory_ValidInput() throws Exception { + List categories = Collections.singletonList(new CategoryDO()); + when(categoryService.getAllCategoryByIsDel(anyInt())).thenReturn(categories); + + mockMvc.perform(get("/category/all/0")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(0)) + .andExpect(jsonPath("$.data").isArray()); + } + + @Test + public void testGetAllCategory_InvalidInput() throws Exception { + mockMvc.perform(get("/category/all/2")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testGetCategoryPageByIsDel_ValidInput() throws Exception { + List categories = new ArrayList<>(); + categories.add(new CategoryDO()); + Page categoryPage = new PageImpl<>(categories); + + when(categoryService.getPageByIsDel(anyInt(), anyInt(), anyInt())).thenReturn(categoryPage); + + mockMvc.perform(get("/category/page/isDel/0?page=0&size=10")); + + verify(categoryService,times(1)).getPageByIsDel(anyInt(), anyInt(), anyInt()); + } + + @Test + public void testGetCategoryPageByIsDel_InvalidInput() throws Exception { + mockMvc.perform(get("/category/page/isDel/2?page=-1&size=0")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + +} \ No newline at end of file diff --git a/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/ShareControllerTest.java b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/ShareControllerTest.java new file mode 100644 index 00000000000..a8544d6b508 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/ShareControllerTest.java @@ -0,0 +1,130 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import org.apache.hertzbeat.templatehub.model.DO.TemplateDO; +import org.apache.hertzbeat.templatehub.model.DO.VersionDO; +import org.apache.hertzbeat.templatehub.service.TemplateService; +import org.apache.hertzbeat.templatehub.service.VersionService; +import org.apache.hertzbeat.templatehub.util.Base62Util; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Test case for {@link ShareController} + */ +@ExtendWith(MockitoExtension.class) +class ShareControllerTest { + + private MockMvc mockMvc; + + @Mock + private TemplateService templateService; + + @Mock + private VersionService versionService; + + @InjectMocks + private ShareController shareController; + + private final String serverAddress = "localhost"; + private final String serverPort = "8080"; + private final String contextPath = "/api"; + + @BeforeEach + public void setup() { + MockitoAnnotations.openMocks(this); + this.mockMvc = MockMvcBuilders.standaloneSetup(shareController).build(); + + ReflectionTestUtils.setField(shareController, "serverAddress", serverAddress); + ReflectionTestUtils.setField(shareController, "serverPort", serverPort); + ReflectionTestUtils.setField(shareController, "contextPath", contextPath); + } + + @Test + public void testGetShareURL_ValidVersion() throws Exception { + int versionId = 1; + + VersionDO mockVersionDO = new VersionDO(); + + String expectedUrl = "http://" + serverAddress + ":" + serverPort + contextPath + "/share/download/" + + Base62Util.idToShortKey(versionId + 100000000); + + when(versionService.getVersion(versionId)).thenReturn(mockVersionDO); + + this.mockMvc.perform(get("/share/getShareURL/{versionId}",versionId) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(MockMvcResultMatchers.jsonPath("$.msg").value(expectedUrl)); + } + + @Test + public void testDownloadShare_ValidKey() throws Exception { + String key = Base62Util.idToShortKey(100000001); + int versionId = 1; + VersionDO mockVersionDO = new VersionDO(); + mockVersionDO.setId(versionId); + mockVersionDO.setVersion("v1.0.0"); + mockVersionDO.setTemplateId(1); + + TemplateDO mockTemplateDO = new TemplateDO(); + mockTemplateDO.setId(1); + mockTemplateDO.setUser(1); + + Resource mockResource = mock(Resource.class); + + when(versionService.getVersion(versionId)).thenReturn(mockVersionDO); + when(templateService.getTemplate(1)).thenReturn(mockTemplateDO); + when(templateService.downloadTemplate(mockVersionDO.getId(), mockTemplateDO.getId(), mockVersionDO.getVersion(), mockVersionDO.getId())).thenReturn(mockResource); + + this.mockMvc.perform(get("/share/download/{key}", key) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(header().string(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + mockVersionDO.getVersion() + ".yml\"")) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)); + + verify(versionService).getVersion(versionId); + verify(templateService).getTemplate(1); + verify(templateService).downloadTemplate(mockVersionDO.getId(), mockTemplateDO.getId(), mockVersionDO.getVersion(), mockVersionDO.getId()); + } + + @Test + public void testDownloadShare_InvalidKey() throws Exception { + String invalidKey = "+0"; + + this.mockMvc.perform(get("/api/share/download/{key}", invalidKey) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isNotFound()); + } +} \ No newline at end of file diff --git a/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/StarControllerTest.java b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/StarControllerTest.java new file mode 100644 index 00000000000..c4a1e59ae8d --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/StarControllerTest.java @@ -0,0 +1,178 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import org.apache.hertzbeat.templatehub.model.entity.Version; +import org.apache.hertzbeat.templatehub.service.StarService; +import org.apache.hertzbeat.templatehub.service.TemplateService; +import org.apache.hertzbeat.templatehub.service.VersionService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.test.web.servlet.MockMvc; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; + +/** + * Test case for {@link StarController} + */ +@ExtendWith(MockitoExtension.class) +class StarControllerTest { + + @InjectMocks + private StarController starController; + + @Mock + private StarService starService; + + @Mock + private VersionService versionService; + + @Mock + private TemplateService templateService; + + private MockMvc mockMvc; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + this.mockMvc = standaloneSetup(starController).build(); + } + + @Deprecated + @Test + public void testGetAllVersionByUserStar_ValidUserId() throws Exception { + List versions = Collections.singletonList(new Version()); + when(starService.getVersionByUserStar(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(versions); + + mockMvc.perform(get("/star/{user}", 1)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(0)) + .andExpect(jsonPath("$.data").isArray()); + } + + @Test + public void testGetAllVersionByUserStar_InvalidUserId() throws Exception { + mockMvc.perform(get("/star/{user}", -1)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testGetVersionPageByUserStar_ValidInput() throws Exception { + List versions = new ArrayList<>(); + versions.add(new Version()); + Page versionPage = new PageImpl<>(versions); + + when(starService.getPageByUserStar(anyInt(), anyInt(), anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(versionPage); + + mockMvc.perform(get("/star/page/user/{user}", 1) + .param("page", "0") + .param("size", "10")); + + verify(starService,times(1)).getPageByUserStar(anyInt(), anyInt(), anyInt(), anyInt(), anyInt(), anyInt()); + } + + @Test + public void testGetVersionPageByUserStar_InvalidUserId() throws Exception { + mockMvc.perform(get("/star/page/user/{user}", -1)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); // Expect failure code + } + + @Test + public void testCancelStar_ValidInput() throws Exception { + // Mock the service methods + when(starService.cancelStarByUser(anyInt(), anyInt())).thenReturn(true); + when(versionService.cancelStarVersion(anyInt())).thenReturn(1); + when(templateService.cancelStarTemplate(anyInt())).thenReturn(true); + + mockMvc.perform(post("/star/cancel/{user}", 1) + .param("versionId", "1")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(0)); + } + + @Test + public void testCancelStar_InvalidUserId() throws Exception { + mockMvc.perform(post("/star/cancel/{user}", -1) + .param("versionId", "1")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testCancelStar_InvalidVersionId() throws Exception { + mockMvc.perform(post("/star/cancel/{user}", 1) + .param("versionId", "-1")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testCancelStar_CancelStarServiceFailed() throws Exception { + // Mock the service methods + when(starService.cancelStarByUser(anyInt(), anyInt())).thenReturn(false); + + mockMvc.perform(post("/star/cancel/{user}", 1) + .param("versionId", "1")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testCancelStar_CancelVersionServiceFailed() throws Exception { + // Mock the service methods + when(starService.cancelStarByUser(anyInt(), anyInt())).thenReturn(true); + when(versionService.cancelStarVersion(anyInt())).thenReturn(0); + + mockMvc.perform(post("/star/cancel/{user}", 1) + .param("versionId", "1")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testCancelStar_CancelTemplateServiceFailed() throws Exception { + // Mock the service methods + when(starService.cancelStarByUser(anyInt(), anyInt())).thenReturn(true); + when(versionService.cancelStarVersion(anyInt())).thenReturn(1); + when(templateService.cancelStarTemplate(anyInt())).thenReturn(false); + + mockMvc.perform(post("/star/cancel/{user}", 1) + .param("versionId", "1")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + +} \ No newline at end of file diff --git a/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/StarDOControllerTest.java b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/StarDOControllerTest.java new file mode 100644 index 00000000000..90af15fbc1e --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/StarDOControllerTest.java @@ -0,0 +1,164 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import org.apache.hertzbeat.templatehub.model.DO.TemplateDO; +import org.apache.hertzbeat.templatehub.service.StarService; +import org.apache.hertzbeat.templatehub.service.TemplateService; +import org.apache.hertzbeat.templatehub.service.VersionService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.test.web.servlet.MockMvc; + +import java.util.ArrayList; +import java.util.List; + +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; + +/** + * Test case for {@link StarController} + */ +@ExtendWith(MockitoExtension.class) +class StarDOControllerTest { + + @InjectMocks + private StarController starController; + + @Mock + private StarService starService; + + @Mock + private VersionService versionService; + + @Mock + private TemplateService templateService; + + private MockMvc mockMvc; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + this.mockMvc = standaloneSetup(starController).build(); + } + + @Test + public void testGetAllVersionByUserStar_InvalidUserId() throws Exception { + mockMvc.perform(get("/star/{user}", -1)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testGetVersionPageByUserStar_ValidInput() throws Exception { + List templateDOS = new ArrayList<>(); + templateDOS.add(new TemplateDO()); + Page templatePage = new PageImpl<>(templateDOS); + + when(starService.getPageByUserStar(anyInt(), anyInt(), anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(templatePage); + + mockMvc.perform(get("/star/page/user/{user}", 1) + .param("page", "0") + .param("size", "10")); + + verify(starService,times(1)).getPageByUserStar(anyInt(), anyInt(), anyInt(), anyInt(), anyInt(), anyInt()); + } + + @Test + public void testGetVersionPageByUserStar_InvalidUserId() throws Exception { + mockMvc.perform(get("/star/page/user/{user}", -1)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); // Expect failure code + } + + @Test + public void testCancelStar_ValidInput() throws Exception { + // Mock the service methods + when(starService.cancelStarByUser(anyInt(), anyInt())).thenReturn(true); +// when(versionService.cancelStarVersion(anyInt())).thenReturn(1); + when(templateService.cancelStarTemplate(anyInt())).thenReturn(true); + + mockMvc.perform(post("/star/cancel/{user}", 1) + .param("versionId", "1")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(0)); + } + + @Test + public void testCancelStar_InvalidUserId() throws Exception { + mockMvc.perform(post("/star/cancel/{user}", -1) + .param("versionId", "1")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testCancelStar_InvalidVersionId() throws Exception { + mockMvc.perform(post("/star/cancel/{user}", 1) + .param("versionId", "-1")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testCancelStar_CancelStarServiceFailed() throws Exception { + // Mock the service methods + when(starService.cancelStarByUser(anyInt(), anyInt())).thenReturn(false); + + mockMvc.perform(post("/star/cancel/{user}", 1) + .param("versionId", "1")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testCancelStar_CancelVersionServiceFailed() throws Exception { + // Mock the service methods + when(starService.cancelStarByUser(anyInt(), anyInt())).thenReturn(true); + when(templateService.cancelStarTemplate(anyInt())).thenReturn(false); + + mockMvc.perform(post("/star/cancel/{user}", 1) + .param("templateId", "1")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + + @Test + public void testCancelStar_CancelTemplateServiceFailed() throws Exception { + // Mock the service methods + when(starService.cancelStarByUser(anyInt(), anyInt())).thenReturn(true); + when(templateService.cancelStarTemplate(anyInt())).thenReturn(false); + + mockMvc.perform(post("/star/cancel/{user}", 1) + .param("versionId", "1")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(15)); + } + +} \ No newline at end of file diff --git a/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/TemplateControllerTest.java b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/TemplateControllerTest.java new file mode 100644 index 00000000000..9a802573af8 --- /dev/null +++ b/template-marketplace/hertzbeat-template-hub/src/test/java/org/apache/hertzbeat/templatehub/controller/TemplateControllerTest.java @@ -0,0 +1,143 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.hertzbeat.templatehub.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.hertzbeat.templatehub.model.dto.TemplateDto; +import org.apache.hertzbeat.templatehub.model.entity.Template; +import org.apache.hertzbeat.templatehub.service.TemplateService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import java.util.ArrayList; +import java.util.List; + +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; + +/** + * Test case for {@link TemplateController} + */ +@ExtendWith(MockitoExtension.class) +class TemplateControllerTest { + + @InjectMocks + private TemplateController templateController; + + @Mock + private TemplateService templateService; + + private MockMvc mockMvc; + + private final ObjectMapper objectMapper = new ObjectMapper(); + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + this.mockMvc = standaloneSetup(templateController).build(); + } + + @Test + void testUploadTemplate_WithEmptyFileAndString_ShouldReturnParamsError() throws Exception { + this.mockMvc.perform(multipart("/template/upload") + .file("file", new byte[0]) + .param("templateDto", "") + .contentType(MediaType.MULTIPART_FORM_DATA)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.msg").value("params error")); + + verify(templateService, never()).upload(any(), any()); + } + + @Test + void testUploadTemplate_WithValidInputs_ShouldReturnUploadSuccess() throws Exception { + TemplateDto dto = new TemplateDto(); + dto.setUserId(1); + dto.setName("Test Template"); + dto.setCurrentVersion("1.0"); + + String jsonString = objectMapper.writeValueAsString(dto); + when(templateService.upload(any(), any())).thenReturn(true); + + this.mockMvc.perform(multipart("/template/upload") + .file("file", new byte[1]) + .param("templateDto", jsonString) + .contentType(MediaType.MULTIPART_FORM_DATA)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.msg").value("upload success")); + + verify(templateService, times(1)).upload(any(), any()); + } + + @Test + void testGetCountByIsDelAndOffshelf_WithValidParams_ShouldReturnCount() throws Exception { + when(templateService.getCountByIsDelAndOffShelf(0, 1)).thenReturn(5); + + this.mockMvc.perform(MockMvcRequestBuilders.get("/template/count/{isDel}/{offShelf}", 0, 1)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.data").value(5)) + .andReturn(); + + verify(templateService, times(1)).getCountByIsDelAndOffShelf(0, 1); + } + + @Test + void testGetTemplatePageByCategory_WithValidParams_ShouldReturnTemplates() throws Exception { + + List

    AXPQcseI0|$xyw@7I)sdM66(lOQ-r~3 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�AmB#xh7{y&zW2s{fnZPIETm zL2AP2n9pOQ)AGLi*{yc@BM|Ez&!uOq$SdIeFXn$!%<@m5V-fN0o$buLY>aE)N!d6V zcO~@eH#Qd=f0+R5@sJEp|CL*fYz7OB?YmDMpEXnJ%~Dq!#82Vs?&&isXh#n!$C4Es zHKzDN!TW=ce{^mwpxq1z9!tSg{aPpIOljTm(qV@*&QEVE4sRb8xnKElG0WU)O&$xW zA7%s#ek=7O6~PM%m-~YszWo)PS#YBi@E|_v2NG}(1M-gldkC%>`~OUfut}sfxJ3>8 zF;MxZe*zoT!#8y(_ydGzV={#+a{am{sd^Tjx8~tEk$l1b^j5{My z)pD%;f{_8I%$Z{9cdiwueBP%Y_aMvsm#7yXN}~FGFDrh2Y$sR3!12=iXWz?< z6Au3K@bdR4x9$JYaQ^;PhqD*={<9MK!MX3pnqsH7uTAB7_CGwx!lfasou+HRqV~+Z zt8j(tPa{j)gWeHqZ?_At!)!7$yNKfl%YJ!V>fm})@eplb zY)fYQ$CdYaykKDYUdlz*WdJ9!XB<^1;1)5wZ-AGclgN&imo1jMtSP?AJ$$;X6=K+O zwp`*+cj=>=44hBEh*OOBh}mk@G5e6ucXyeflwMoe$jKIuU;F4KajT?h**ARNzEbYq zT5GtgrtWP;K|2^f&q4LQsF>cF-XS7KG0N@E?;Xz$-Epc4UHc09+TLhol!)S>;cK5p zyQTtyyd#P{K5E_Ue=%KhfPduuv-%Lrns?KF>S2{?zsuiJ5t=N1(>ofLzHBr^!d2`vNRf5Ut9`*4#`TQ+N;dq39 zRO+S!q6q0!Y5xmeJl3n1fBBeZxtp%(p-!;MRuK_T>zZ+~_AxcBXl zz{_0b!F*ZtvOq`UC~1YoeETjhKCUZ@+;!7eNAB_-Mbz}OLanN<>N@3{X z0Mo0MA$S!5bLBs2^lPv+3njf|z&1YF;6z%_^uAG9+a+;#`Zw29K7B^QjgRB^TP7tB zpcUeccH-?PvZ||haD2C}ZVl`K-5zD@`2@_tBX2(dDU3Ihu`bp6@+=C4-}9$ec5nC+ zym7I{etp5SSDTKZ6T@bd53Bf$hY-ALABkzIbpK2T(g54~YCYN#qFn>7;8PI|8gXL2 zJ#l#a-V^`kfDlEPb$gN^IFD_uqqjT@ia0(rUFNbLRDGN6Ct6!F26|E(on_ z@nZ0`W+zfftjrBxw>`K?(OY9vu=EiYcHl|H(cILEh#gU|{F z(yw2;@7UOMS0t+=Qp>63UW@dOTz{jd!S0@JoQQe*$y+M5h01Q)qw?NCw=A-JIB%T3 ztO>T56^~we1-=O}@7c1RYHE`A`z_MsbaP{)#oDvdo-{ukO|*V`BnAiM)lb+7K?)WO@=1*>y?!I~YunvC&$uYEmtjqo zkSpKtspMS=R_uQ7wWxH?x0a14#Ai;4#Nghy4_tv5$igW-TY0)0d5%G&uEUPO6Zy<% zh?(|BFlLu^gA?$k_88FDc`U44f)+J2^JLx zx#-znuP}x0km2Lgz7l|VkSt+sBh&4i``n0hR#Ia60{vjxz08;}*u-qS=sEvb$7`Ys z(NFv_?a$ow(C?>Wt4~H1T;}S=FrP?=qZ_)sB;HnXpSJ%6#+fpQ%Hq~@a7HZeyq1I7 zyuOXjcoaEi*Z;%bdq*{$cKf6FIwLwDjH3uh8%0D#ibLongQyH5pdv+DM5OmlfFvpc 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