From 27845591130bf97f48bbc04dea0da48ac8e18d0e Mon Sep 17 00:00:00 2001 From: MathewFrancis Date: Thu, 8 May 2025 12:24:48 +0530 Subject: [PATCH] Add a global asterisk feature --- .../CezenPBX_API.postman_collection.json | 29 ++++++++++++++++ .../test1/mariadb_data/aria_log.00000001 | Bin 4898816 -> 4898816 bytes .../test1/mariadb_data/aria_log_control | Bin 52 -> 52 bytes MySQL_conf_pbx/test1/mariadb_data/ib_logfile0 | Bin 100663296 -> 100663296 bytes .../cezenPBX/DAO/BasicAsteriskOpsDAO.java | 19 +++++++++++ .../example/cezenPBX/DAO/CezenPbxOpsDAO.java | 2 ++ .../controller/CezenPbxController.java | 13 ++++++++ .../cezenPBX/service/BasicPbxService.java | 31 ++++++++++++++++++ .../service/BasicPbxServiceInterface.java | 3 ++ 9 files changed, 97 insertions(+) diff --git a/MySQL_conf_pbx/test1/Rest-API-Postman/CezenPBX_API.postman_collection.json b/MySQL_conf_pbx/test1/Rest-API-Postman/CezenPBX_API.postman_collection.json index 92ed814..9652191 100644 --- a/MySQL_conf_pbx/test1/Rest-API-Postman/CezenPBX_API.postman_collection.json +++ b/MySQL_conf_pbx/test1/Rest-API-Postman/CezenPBX_API.postman_collection.json @@ -147,6 +147,35 @@ } }, "response": [] + }, + { + "name": "Add_a_global_extension_feature", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"context\": \"default\",\n \"extension\": \"w\",\n \"priority\": 5,\n \"app\": \"Dial\",\n \"appdata\": \"W conf\"\n}\n", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8081/cezen/add_feature", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8081", + "path": [ + "cezen", + "add_feature" + ] + } + }, + "response": [] } ] } \ No newline at end of file diff --git a/MySQL_conf_pbx/test1/mariadb_data/aria_log.00000001 b/MySQL_conf_pbx/test1/mariadb_data/aria_log.00000001 index c609d75ba936913a7fe912969126f2b508d0849c..8b58be4e10fab674abc6c0e087b4756062b93a9f 100644 GIT binary patch delta 271 zcmYkzw@yL<0EJ=13d*&iSP^^gT~Sf2_i20p2ZnFd1jE3Jvy+LF3yHI%Z{b5|)a9P! zpT3+@={a8dO@p{bO`5f6)g~dSU5AuFr!L)k^h)c~FJr)oheRl@#J$UpaH1up_?8U1$6VspB@8|pcBbWXTgW?|qPC51f diff --git a/MySQL_conf_pbx/test1/mariadb_data/aria_log_control b/MySQL_conf_pbx/test1/mariadb_data/aria_log_control index 08e5c4f758db2595757bab7a1cc45772ac65daee..e0a15ce57030fece0ced0e264d53e3985f163ccd 100644 GIT binary patch delta 27 gcmXppnII?jGI$yjBLjo;LN5j&#c+iMNH8z}09xt=2><{9 delta 27 gcmXppnII>2^8Ul^j0_Bu7kDuMDTYlfK!Sk*0D7ecq5uE@ diff --git a/MySQL_conf_pbx/test1/mariadb_data/ib_logfile0 b/MySQL_conf_pbx/test1/mariadb_data/ib_logfile0 index 403db6829203e741e59252d89a2b179693306efe..13a022c542c47e8e35895691e462ca5de2eef00b 100644 GIT binary patch delta 9501 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 R!FTupKaIQP`ZHz=`5)CdTi5^q delta 7436 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 R=9s@E_iL_C8&8hx{|D~a&Ex<8 diff --git a/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/DAO/BasicAsteriskOpsDAO.java b/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/DAO/BasicAsteriskOpsDAO.java index 8d76b84..34920d3 100644 --- a/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/DAO/BasicAsteriskOpsDAO.java +++ b/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/DAO/BasicAsteriskOpsDAO.java @@ -112,4 +112,23 @@ public class BasicAsteriskOpsDAO implements CezenPbxOpsDAO { return query.executeUpdate() == 1; } + + @Override + @Transactional + public ReturnStatus saveAnExtensionByCharacters(ExtensionsTable extensionsTable) { + + try{ + + this.entityManager.persist(extensionsTable); + + return new ReturnStatus(true, + extensionsTable.getExtension() +" configured as "+ extensionsTable.getContext() +" added", + ""); + + }catch (Exception e){ + return new ReturnStatus(false, + extensionsTable.getExtension() +" configured as "+ extensionsTable.getContext() +" Already exists", + e.toString()); + } + } } diff --git a/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/DAO/CezenPbxOpsDAO.java b/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/DAO/CezenPbxOpsDAO.java index 0ce7d36..0da37bf 100644 --- a/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/DAO/CezenPbxOpsDAO.java +++ b/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/DAO/CezenPbxOpsDAO.java @@ -19,4 +19,6 @@ public interface CezenPbxOpsDAO { int getTheHighestPriorityNumberByEndpoint(String endpoint); boolean deleteAnExtensionPoint(String endpoint); + + ReturnStatus saveAnExtensionByCharacters(ExtensionsTable extensionsTable); } diff --git a/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/controller/CezenPbxController.java b/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/controller/CezenPbxController.java index 6d8a9b1..ed52823 100644 --- a/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/controller/CezenPbxController.java +++ b/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/controller/CezenPbxController.java @@ -80,4 +80,17 @@ public class CezenPbxController { return this.basicPbxServiceInterface.deleteByExtension(sipNumber); } + + // add global extension features like voicemail + @PutMapping("/add_feature") + public ReturnStatus addAGlobalFeatureToExtension(@RequestBody ExtensionsDTO extensionsDTO){ + + return this.basicPbxServiceInterface.addFeaturesToExtensionsForEndpoints( + extensionsDTO.context(), + extensionsDTO.extension(), + extensionsDTO.priority(), + extensionsDTO.app(), + extensionsDTO.appdata()); + } + } diff --git a/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/service/BasicPbxService.java b/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/service/BasicPbxService.java index 9f76bef..f2263ee 100644 --- a/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/service/BasicPbxService.java +++ b/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/service/BasicPbxService.java @@ -100,4 +100,35 @@ public class BasicPbxService implements BasicPbxServiceInterface { return this.cezenPbxOpsDAO.deleteAnExtensionPoint(extensionNumber); } + + // TODO make sure you check if the extension field is a literal character + @Override + public ReturnStatus addFeaturesToExtensionsForEndpoints(String context, String extension, int priority, String app, String appdata) { + // check if extension is a character + String extensionWordLiteral = ""; + + if(extension.chars().allMatch(Character::isLetter)){ + + extensionWordLiteral = extension; + }else{ + + return new ReturnStatus(false, "Only Character type extension point allowed", "User entered a numerical character sequence expected an alphabetical one instead"); + } + + + //if received input is empty + if(extensionWordLiteral.isEmpty()) return new ReturnStatus(false, "Extension field is empty", "User entered an empty extension"); + + // if yes then add the feature to the database + //return the status of the feature addition + return this.cezenPbxOpsDAO.saveAnExtensionByCharacters( + new ExtensionsTable( + context, + extension, + priority, + app, + appdata + ) + ); + } } diff --git a/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/service/BasicPbxServiceInterface.java b/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/service/BasicPbxServiceInterface.java index 5279985..520b626 100644 --- a/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/service/BasicPbxServiceInterface.java +++ b/MySQL_conf_pbx/test1/springCezenPBX/src/main/java/com/example/cezenPBX/service/BasicPbxServiceInterface.java @@ -18,4 +18,7 @@ public interface BasicPbxServiceInterface { public ReturnStatus setAors(String id, int maxContacts); public boolean deleteByExtension(String extensionNumber); + + // this method will allow the creation of global features azs long as 'extension' field is a literal character + public ReturnStatus addFeaturesToExtensionsForEndpoints(String context, String extension, int priority, String app, String appdata); }