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
c@E81zA$ZPh5w0O8}uCEygPwx1^3o~0J
zU(%$%TloViG%2uZekX9{Llw{T$M7Zd92o8lig;pKCy1q#k*6;~zXB-IO(RY5DrKBj
zM(fbxKG>JIJWtV-fe~DzXrDA-0oN&GD4<9n=I}El<68aznWy_Wa{!AL+ZpL$)EVz#
z(wXXEria-*YEHla&k!`|sgGeClbE1<60>lSqrFqIe4lKQdX1DD@%fu^T*9y267UmN
CrvMKC
literal 0
HcmV?d00001
diff --git a/tacit-admin/target/classes/com/tacit/admin/controller/TestController.class b/tacit-admin/target/classes/com/tacit/admin/controller/TestController.class
new file mode 100644
index 0000000000000000000000000000000000000000..61da2cd763ff617c0154577a75a16440a5da469d
GIT binary patch
literal 1872
zcmbVMQEwDg6h61z?$UM@S_BIsE~vQMDpv&&*;=w`0-CJQ(ApQD?#|wwUYwb`-nrAJ
zF(xFMm}tZoO_cazjEV6DOf*&=;N9O*O8pbY@6N1cT1(jYF!#=#Ip=)meCNC8&%bZq
zA)*GIAE5ynEK#9MLsVq6@2Xf9JP?u3FSo8r&oU}bt4P@yMuXMb;vU+==+Ij-2y~@m
zbXXDXP(_tknq}q5V|dlCSn
z6epf1r1GQLKp{^?lmEr-xc|Jd)3!cJ2kFTYO_b>n9cEO0fZQwmA&!hjeQDnXe{V+}
z&FEad{HBil{)tw1)SNLyhQh-P%Qsg2L$u2GTSF(Q;J+Pu$OQbaND
z2+wM>%EgugZzNW)C?nf-Mul13mW=i`RU|JZVN03?f$)sRo7xk>qA<#xdmjsSNda#v
z$K4~y2gJ~lQxq7l_T6hn!}I8cu!%t`GkrTw=kzsi9Ub)
z!-rYMA2B+&+8F7~{iOKqM{6FLIx6L?;TsY
zBps$gigO-TuAtG$Uuo~uA9P@Vc7h#E!476-Juo<+K9^($`^rw(R~_uB9PDX&4KO8F
f)tNNY*VFZE>R3V5Z{U1xE6X}f1MtmW{xkmoHd-zY
literal 0
HcmV?d00001
diff --git a/tacit-admin/target/classes/com/tacit/admin/controller/UserController.class b/tacit-admin/target/classes/com/tacit/admin/controller/UserController.class
new file mode 100644
index 0000000000000000000000000000000000000000..027bd73d7063a3de5cd2a46eb0926a7b68f904d1
GIT binary patch
literal 4220
zcmb_f>vK~@6hE7`1k#HwEuuhC-lQ$EDo;s4`w%RqwDyHORBn=Odg12Ya38JFanx~e
z+8G5uC=P=&!iWxE1RR*5&{4npcaQ}C3CFX0Z<3odNmGUo&EDNTyZbx8-#KTu|NQsp
zF97IL#}mvt$cVjU(>7i=FVP~WS^
zSODr^r35P=K%gnCXzaM1h%jSR#&Zd@g!QPbj?0F^`|e=9HK`zw&IQg?WCzb~Q1!T?
z5f}+BSjNy-D@9|LPQ%=2m|d`$X@%N7mdIN|*Qjec%*-T`!LYSe3wK{JqQo`XvJJ%i
z`LjQv%Y(!TgoT(LM4`iorai3a)SQ;%ag39x-Bg!Nk0d4?Ofo~riMD>zP9$U_ML^1a
ze=9TdAbWK_{pSxDIWcBN4JFBCC$Qc-`Q*}r^yMqZPK-XDznPu=hQQvkF)_^|G@@uR
z&)IZHH?09VnZ)4XqD;xEjg&2;t~#5G18+#?0cJ6yC<1Fg%~i5TkEKE@fWRgR8emx?
zY=Lcl*h*ka4e2033v4Ga_H?Q)qE-Nc(BX%60^18vs>PZFov>4=7L76!v!E*&F3tL-
z1g<2AcX{HGQ-Dzkx|19PR=P`_z$4I6!&)~;F}mW+>Q+@=#L$V3p!eWv{$tRbuGzTD
zp~kipm4+45s+dL`24)V=ofap!GqYc0ewuZH9^=Lt%-);N&j0*)?sxBOdgjL`H*OKw
zQ*#a+W!@B^Dk39ruzU_?L5Ro61)ao=n?WILL|=v&pduFAoI-&r`8nL+*C4GcWH_3Vsttxb8dT5{V{aW
z8>(R)E5H&|Kl#*)7l*kzbNylF+uQwpuFRqi64>YrJ3&x9`Q*-TnXfJq2v9|v(CMd2
z>@x!U%1T(a3d+`G?otbJt@&&y+$xUG4SC5VXE^8u5rS#0T^!%e-dNw)T%$2*j5kGbO
z;@pl)FbF45&P6bt3cyJ??T1qYRuxLBd#nU!-~+6?;=&r7Ah0HQ%1x^xba5fw}NPkf`H@NHOl6CP5r@0<8-j;(U+jwh?7V
z6#jT@<*pZ=$h)|xmEN!AvJ_u;R$)07&GJv*@=L`nS@5HQ+9Jh*i#*LNId0NXnLm!|
zHGKONo@KXhWWW0wtGPpX_S#(f;=RnJU(=U=flc_dsl$I8up0394Yq#l@pd`3er)l1
zjlYf9qu3H`8#*3<^apo)vagMTlW
z@FJ`=VI8bTySCFnOxOS~p{1Xn@-lw#Gl$WX<7@7?4;wol!e$=~?3{xgcX7-)K7cLY
zCXLW0AZ&E(T?n`mUV&Y>Vy?~CRxq5$GJ1cz~xH*u5`=8U|BUj$2e
zPoA*eQe=G`+1nmuM+(UD%pJvD%Q5#(1?D=@dS?aZ-i0t?;>-=ealzam4CV2?SBh_#
z;~Vh^I$8!_PT4Wsk1N~iDm&(bLv3^Lei?ChBZNI3h^={XTLmx>rSZW90gk7XfqgR%$pRZ^r%agUU_bsJ-fGR7
literal 0
HcmV?d00001
diff --git a/tacit-admin/target/classes/com/tacit/admin/entity/User.class b/tacit-admin/target/classes/com/tacit/admin/entity/User.class
new file mode 100644
index 0000000000000000000000000000000000000000..a3b98df361bcacb9ccf2f512ad23023eb9c7e721
GIT binary patch
literal 6753
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
Ir$3VUAN|V*3IG5A
literal 0
HcmV?d00001
diff --git a/tacit-admin/target/classes/com/tacit/admin/entity/dto/LoginRequest.class b/tacit-admin/target/classes/com/tacit/admin/entity/dto/LoginRequest.class
new file mode 100644
index 0000000000000000000000000000000000000000..1916b8a8cf2d04b09d8705c95a0eb89afc4598c5
GIT binary patch
literal 2429
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
S;d2)sai@Qh@8M&7iqyY04*%!?
literal 0
HcmV?d00001
diff --git a/tacit-admin/target/classes/com/tacit/admin/mapper/UserMapper.class b/tacit-admin/target/classes/com/tacit/admin/mapper/UserMapper.class
new file mode 100644
index 0000000000000000000000000000000000000000..ae164c4ca7a64fd170a249caccdae3a246f52188
GIT binary patch
literal 381
zcmb7AyH3ME5S$ATlK_I2l7^D~03)POP#GZ+LBDoZ;UeFib$3R}uTk&;d=z5iC<>yZ
z*oU+`GduhB{qYH4hO+`AgR3Su%G}sYyl~c&>qM$xx>_(K^=oDewdB{B-F6
literal 0
HcmV?d00001
diff --git a/tacit-admin/target/classes/com/tacit/admin/service/UserService.class b/tacit-admin/target/classes/com/tacit/admin/service/UserService.class
new file mode 100644
index 0000000000000000000000000000000000000000..fdc0f6d02df8896b224d2a7d5a449cb2868e9fbc
GIT binary patch
literal 790
zcmb7C%T59@6um`p1bp!DxifJC8yn*iV}c74l1WUQuyI#ru9K3P7N;E|zvjXZ@S}`v
z2Z3lnUG#nKx#!-V_m9^%0O-M~2PFdMp-ib}A=i{eDHl{>HsK-Cf!PGb-h)j7^%0ve
znlKU5`{4*f?ZFm-D;qv!GUbuXX*wM;&DA)`6~z~gLUFlZ?9b>3G-A}2|8{C;!BQk}
z+4dJ10-bRYcRT)fbtp8~Qzx!Vpf=~}M+E3HgD?LW-%AoJLJ?@TJB5T?^Mv|bX_KN7
z@K`XNXHMdG!1Y>zHzvLsX2>+!6a>!NYw?{&gU`p&9AAwv!LQ)f&+-huoXD690)v&*
zk(SiApa*=;(G<0^t4l~VmO`P`AILll@s1~^0d-qOP?+Mv{uY6!rC%$2(RDTc(-Xfn
z(pZhah8bn!UC-FjgKe<3tU%SRHP|t)yXLh7d**&0>h8WVTbs~w=L0x&m?JkI&mvAf
E0iC4n!vFvP
literal 0
HcmV?d00001
diff --git a/tacit-admin/target/classes/com/tacit/admin/service/impl/UserServiceImpl.class b/tacit-admin/target/classes/com/tacit/admin/service/impl/UserServiceImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..0678d41d3f6cece0588c7c3b1872b792a3722675
GIT binary patch
literal 4374
zcmbtX`*Ryt75=XLkSwqBP|`H6nBXdM_c$G7>4ieuH^MYNr2IKA9wHl&N<)t
z&bilr|M#E&0$>>LB#{v4Go7;T8>Z#!Mxkukx+mRv%apoRu9WmizDbuE8EH{FGb@94E<`tjxK
z3E4Vm*_J;f(3I_-5@ZGF(f&M}y7&
zti{;&tzw7NHB2JSZ!Ah*k$rGMU2U=<(4WoE8S{o-GVG#0;VYhU-K&5l31)<9SuTmr
zJE_5RT&bImU9f@_=ohMz9G_6vX*bAT8e6e3g$D&vD%r{pHS~~%?bsoZkQbP@xLe0&
z=A`N8Vva^5-K&RE_y}N5R4ndbm_lDrb3RvJv@J-zw>O%k#OkZNe(rhF^7q
z(pfp-Zr-PGkXB4r8ooTMT9(rNh=#)$$
zRAA(P7h62ubm*+2L|{jV8Q(TyvdeX!NuwV}H5|k7z#D%=mPT2HsujnfPyeKs#wly_#6y@7Ek(W5G(Xs_58`4wYwvbnoPD<7ih19Ua#%6jI
z?qD*PhD0$5_NP4!YCg6mK-Vw}YpGDeKEJu9=6Iu56rI;Y+5h
zs6L*8Be3`Pi3CF6r!gex#&--2MyoD_i3ysZRxTYPC4f#<+&^3pk{vA-V(*0#2W(H
zCH(Mg7!`R;XQ4LJxDM9Ib^J)fk5%qdtdqc+8hlg3Pw_Jbz`=X#AFL%UsHLb(1n#9y
z!ir*2%#vZ1ne6ppuc^n$49T9ryKDYHo-DFj$Z2gZehaHS{w1~afNYuI1hSf2_
zhIyX(j!tjs38(6sa@11iyUmK3iKV0VKBW+Ww;J!EcRy{f-i6AmPR)%1SMKD7a;rXb
zI5=6x++}FlwGYI;bfx3-M4(5J<*<|W-^9NbB>3Z5iqCEQf25W7H17%38di*{IXo8g
zx}Gz1-UaV1J-4vokHL}*uL=Ozj7_{M08ZfBeY|tm!Tr3d#aC#&iT9pGY(0Go4~+L^
zx_WP7+k4oW+1d0icJX<-=TGSFyN%ui-b4R8oZSRvA%kXKAEL|K`Md)UG8koTM~E0%
zBR0Q$g7$a<#Upr>Aw9-f%BOH-KSy}5#iw{};M2f==hJQ?@1ajwTJCP(Qx1c54;uM&
z07LZcaeAA;rvu+EF}4KXcSn5Xd+RhQ%7$;^P(WAjZG0wym0azkUpjN}FuK^t6jxh9
zw1}$|*;EXP7(;4gKSuqpKoYp$dXYq98nRM#TF7Z!`VgrZiKVNnZm0{jbZrVuD#6Ua3{8qhXt0$gFDuszH!(Nf_cwGb
zqI5cA-$LcD)UU@cRocFE8w*W%BmQ*}&(Y5pj_%ETg%e)9jjK(V-ka&-%PX~)SNZZ<
z^ztsgGtj(<>s<7MftJpe&gPr=VP^|x{G_u*WxP4a!2k;sIKpCnlA+~UamUe%6U^=;
z4v_sLnC9;(6mS}IWY5Dh+~c3c^E_E8WekNO)hW1)pW`hC+{RfddkLb9;urWOgP%hu
we#IJVCdvl9jbF3YYc&?m`VD9OmZ)t={7W5b`nPc)O!Ds|f&Zc2cWwax0X@N&C;$Ke
literal 0
HcmV?d00001
diff --git a/tacit-app-api/pom.xml b/tacit-app-api/pom.xml
new file mode 100644
index 0000000..3f4b5b2
--- /dev/null
+++ b/tacit-app-api/pom.xml
@@ -0,0 +1,101 @@
+
+
+
+ tacit-parent
+ com.tacit
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ tacit-app-api
+ Tacit App API
+ App API Service for Tacit Microservices
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+
+
+
+
+ com.oceanbase
+ oceanbase-client
+ 2.4.0
+
+
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ 2.3.0
+
+
+
+
+ com.tacit
+ tacit-common
+ ${project.parent.version}
+
+
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+ false
+
+
+
+
+
\ No newline at end of file
diff --git a/tacit-app-api/src/main/java/com/tacit/app/AppApiApplication.java b/tacit-app-api/src/main/java/com/tacit/app/AppApiApplication.java
new file mode 100644
index 0000000..866915e
--- /dev/null
+++ b/tacit-app-api/src/main/java/com/tacit/app/AppApiApplication.java
@@ -0,0 +1,17 @@
+package com.tacit.app;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+@EnableFeignClients
+@MapperScan("com.tacit.app.mapper")
+public class AppApiApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(AppApiApplication.class, args);
+ }
+}
diff --git a/tacit-app-api/src/main/java/com/tacit/app/config/SwaggerConfig.java b/tacit-app-api/src/main/java/com/tacit/app/config/SwaggerConfig.java
new file mode 100644
index 0000000..4b4bbfc
--- /dev/null
+++ b/tacit-app-api/src/main/java/com/tacit/app/config/SwaggerConfig.java
@@ -0,0 +1,23 @@
+package com.tacit.app.config;
+
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Info;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Swagger配置类
+ * 使用SpringDoc OpenAPI配置API文档
+ */
+@Configuration
+public class SwaggerConfig {
+
+ @Bean
+ public OpenAPI appApiOpenAPI() {
+ return new OpenAPI()
+ .info(new Info()
+ .title("Tacit App API")
+ .description("App接口服务API文档")
+ .version("1.0.0"));
+ }
+}
diff --git a/tacit-app-api/src/main/java/com/tacit/app/controller/AuthController.java b/tacit-app-api/src/main/java/com/tacit/app/controller/AuthController.java
new file mode 100644
index 0000000..7a24f29
--- /dev/null
+++ b/tacit-app-api/src/main/java/com/tacit/app/controller/AuthController.java
@@ -0,0 +1,49 @@
+package com.tacit.app.controller;
+
+import com.tacit.app.entity.User;
+import com.tacit.app.entity.dto.LoginRequest;
+import com.tacit.app.entity.dto.LoginResponse;
+import com.tacit.app.service.UserService;
+import com.tacit.common.entity.ResponseResult;
+import com.tacit.common.feign.AdminFeignClient;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/auth")
+@Tag(name = "认证管理", description = "用户认证相关接口")
+public class AuthController {
+
+ @Autowired
+ private UserService userService;
+
+ @Autowired
+ private AdminFeignClient adminFeignClient;
+
+ @Operation(summary = "用户登录", description = "用户登录接口")
+ @PostMapping("/login")
+ public ResponseResult login(@RequestBody LoginRequest loginRequest) {
+ LoginResponse loginResponse = userService.login(loginRequest);
+ return ResponseResult.success(loginResponse);
+ }
+
+ @Operation(summary = "用户注册", description = "用户注册接口")
+ @PostMapping("/register")
+ public ResponseResult register(@RequestBody User user) {
+ boolean result = userService.register(user);
+ return ResponseResult.success(result);
+ }
+
+ @Operation(summary = "测试Feign调用", description = "测试通过Feign调用管理台服务")
+ @GetMapping("/test-feign/{userId}")
+ public ResponseResult