From f44a6a5da5dfadd8c1c8ca818a17db524620479c Mon Sep 17 00:00:00 2001 From: dqz Date: Wed, 5 Mar 2025 09:30:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0api=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../customize/config/SecurityConfig.java | 2 +- .../api/controller/ShopController.java | 34 ++++++ .../api/customize/config/SecurityConfig.java | 2 +- .../api/response/ShopGoodsResponse.java | 15 +++ .../src/main/resources/application-dev.yml | 105 ++++++++++++++++++ .../shop/goods/GoodsApplicationService.java | 5 + .../domain/shop/goods/db/ShopGoodsMapper.java | 11 ++ .../shop/goods/db/ShopGoodsService.java | 3 + .../shop/goods/db/ShopGoodsServiceImpl.java | 6 + 9 files changed, 181 insertions(+), 2 deletions(-) create mode 100644 agileboot-api/src/main/java/com/agileboot/api/controller/ShopController.java create mode 100644 agileboot-api/src/main/java/com/agileboot/api/response/ShopGoodsResponse.java create mode 100644 agileboot-api/src/main/resources/application-dev.yml diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/customize/config/SecurityConfig.java b/agileboot-admin/src/main/java/com/agileboot/admin/customize/config/SecurityConfig.java index e8a6cc4..e7f3e74 100644 --- a/agileboot-admin/src/main/java/com/agileboot/admin/customize/config/SecurityConfig.java +++ b/agileboot-admin/src/main/java/com/agileboot/admin/customize/config/SecurityConfig.java @@ -134,7 +134,7 @@ public class SecurityConfig { .authorizeRequests() // 对于登录login 注册register 验证码captchaImage 以及公共Api的请求允许匿名访问 // 注意: 当携带token请求以下这几个接口时 会返回403的错误 - .antMatchers("/login", "/register", "/getConfig", "/captchaImage", "/api/**").anonymous() + .antMatchers("/login", "/register", "/getConfig", "/captchaImage", "/api/**", "/file/**").anonymous() .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() // TODO this is danger. diff --git a/agileboot-api/src/main/java/com/agileboot/api/controller/ShopController.java b/agileboot-api/src/main/java/com/agileboot/api/controller/ShopController.java new file mode 100644 index 0000000..f9b8dfc --- /dev/null +++ b/agileboot-api/src/main/java/com/agileboot/api/controller/ShopController.java @@ -0,0 +1,34 @@ +package com.agileboot.api.controller; + +import com.agileboot.api.response.ShopGoodsResponse; +import com.agileboot.common.core.dto.ResponseDTO; +import com.agileboot.domain.shop.category.CategoryApplicationService; +import com.agileboot.domain.shop.category.dto.ShopCategoryDTO; +import com.agileboot.domain.shop.goods.GoodsApplicationService; +import com.agileboot.domain.shop.goods.db.ShopGoodsEntity; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/shop") +@CrossOrigin(origins = "*", allowedHeaders = "*") +@RequiredArgsConstructor +public class ShopController { + private final GoodsApplicationService goodsApplicationService; + private final CategoryApplicationService categoryApplicationService; + + @GetMapping("/goods") + public ResponseDTO getShopGoodsInfo() { + // 获取商品列表 + List goodsList = goodsApplicationService.getGoodsAll(); + // 获取分类列表 + List categoryList = categoryApplicationService.getCategoryAll(); + + + return ResponseDTO.ok(new ShopGoodsResponse(goodsList, categoryList)); + } +} \ No newline at end of file diff --git a/agileboot-api/src/main/java/com/agileboot/api/customize/config/SecurityConfig.java b/agileboot-api/src/main/java/com/agileboot/api/customize/config/SecurityConfig.java index f9a7f58..a476816 100644 --- a/agileboot-api/src/main/java/com/agileboot/api/customize/config/SecurityConfig.java +++ b/agileboot-api/src/main/java/com/agileboot/api/customize/config/SecurityConfig.java @@ -64,7 +64,7 @@ public class SecurityConfig { .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) // 禁用 session .and() .authorizeRequests() - .antMatchers("/common/**").permitAll() + .antMatchers("/common/**", "/api/**").permitAll() .anyRequest().authenticated() .and() // 禁用 X-Frame-Options 响应头。下面是具体解释: diff --git a/agileboot-api/src/main/java/com/agileboot/api/response/ShopGoodsResponse.java b/agileboot-api/src/main/java/com/agileboot/api/response/ShopGoodsResponse.java new file mode 100644 index 0000000..a867a20 --- /dev/null +++ b/agileboot-api/src/main/java/com/agileboot/api/response/ShopGoodsResponse.java @@ -0,0 +1,15 @@ +package com.agileboot.api.response; + + +import com.agileboot.domain.shop.category.dto.ShopCategoryDTO; +import com.agileboot.domain.shop.goods.db.ShopGoodsEntity; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class ShopGoodsResponse { + private List goodsList; + private List categoryList; +} diff --git a/agileboot-api/src/main/resources/application-dev.yml b/agileboot-api/src/main/resources/application-dev.yml new file mode 100644 index 0000000..ea85da0 --- /dev/null +++ b/agileboot-api/src/main/resources/application-dev.yml @@ -0,0 +1,105 @@ +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: agileboot + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: + primary: master + strict: false + druid: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + datasource: + # 主库数据源 + master: + url: jdbc:mysql://localhost:3306/agileboot-pure?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: root + password: ys123456 + # 从库数据源 +# slave: +# url: jdbc:mysql://localhost:33067/agileboot2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 +# username: root +# password: 12345 + + # redis 配置 + redis: + # 地址 + host: 127.0.0.1 + # 端口,默认为6379 + port: 6379 + # 数据库索引 + database: 0 + # 密码 +# password: 12345 + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms + +logging: + file: + path: D:/logs/agileboot-dev + + +springdoc: + swagger-ui: + # ***注意*** 开启Swagger UI界面 **安全考虑的话生产环境需要关掉** + # 因为knife4j的一些配置不灵活 所以重新改回springdoc+swagger的组合 真实开发的时候 使用apifox这种工具效率更高 + enabled: true + url: ${agileboot.api-prefix}/v3/api-docs + config-url: ${agileboot.api-prefix}/v3/api-docs/swagger-config + + +# 项目相关配置 +agileboot: + # 文件基路径 示例( Windows配置D:\agileboot,Linux配置 /home/agileboot) + file-base-dir: D:\agileboot + # 前端url请求转发前缀 + api-prefix: /dev-api + demo-enabled: false diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/GoodsApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/GoodsApplicationService.java index 2d0501a..55d0a2b 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/GoodsApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/GoodsApplicationService.java @@ -5,6 +5,7 @@ import com.agileboot.domain.common.command.BulkOperationCommand; import com.agileboot.domain.shop.goods.command.AddGoodsCommand; import com.agileboot.domain.shop.goods.command.UpdateGoodsCommand; import com.agileboot.domain.shop.goods.db.SearchGoodsDO; +import com.agileboot.domain.shop.goods.db.ShopGoodsEntity; import com.agileboot.domain.shop.goods.db.ShopGoodsService; import com.agileboot.domain.shop.goods.dto.ShopGoodsDTO; import com.agileboot.domain.shop.goods.model.GoodsModel; @@ -54,4 +55,8 @@ public class GoodsApplicationService { model.deleteById(); } } + + public List getGoodsAll(){ + return shopGoodsService.selectAll(); + } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsMapper.java index 7dba089..18da2cb 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import java.util.List; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -31,4 +32,14 @@ public interface ShopGoodsMapper extends BaseMapper { Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper ); + + /** + * 查询所有商品(未删除的) + * @return 商品列表 + */ + @Select("SELECT * " + + "FROM shop_goods " + + "WHERE deleted = 0 " + + "ORDER BY create_time DESC") + List selectAll(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsService.java index f9581de..6f01653 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsService.java @@ -3,6 +3,7 @@ package com.agileboot.domain.shop.goods.db; import com.agileboot.common.core.page.AbstractPageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; /** *

@@ -14,4 +15,6 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface ShopGoodsService extends IService { Page getGoodsList(AbstractPageQuery query); + + List selectAll(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsServiceImpl.java index 346d294..45e46ab 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsServiceImpl.java @@ -4,6 +4,7 @@ import com.agileboot.common.core.page.AbstractPageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import java.util.List; /** *

@@ -19,4 +20,9 @@ public class ShopGoodsServiceImpl extends ServiceImpl getGoodsList(AbstractPageQuery query) { return baseMapper.getGoodsList(query.toPage(), query.toQueryWrapper()); } + + @Override + public List selectAll() { + return baseMapper.selectAll(); + } }