Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
71.00% covered (warning)
71.00%
71 / 100
55.56% covered (warning)
55.56%
5 / 9
CRAP
0.00% covered (danger)
0.00%
0 / 1
LogoGenController
71.00% covered (warning)
71.00%
71 / 100
55.56% covered (warning)
55.56%
5 / 9
18.78
0.00% covered (danger)
0.00%
0 / 1
 register_routes
100.00% covered (success)
100.00%
39 / 39
100.00% covered (success)
100.00%
1 / 1
1
 get_generate_logos_args
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
1
 get_generation_status_args
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
 get_generate_more_logos_args
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
 get_select_logo_args
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
 generate_logos
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
 get_generation_status
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
12
 generate_more_logos
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 select_logo
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace NewfoldLabs\WP\Module\Onboarding\RestApi;
4
5use NewfoldLabs\WP\Module\Onboarding\Permissions;
6use NewfoldLabs\WP\Module\Onboarding\Services\Ai\ImageGeneration\LogoGenerationService;
7
8/**
9 * Class LogoGenController
10 */
11class LogoGenController {
12
13    /**
14     * The namespace of this controller's route.
15     *
16     * @var string
17     */
18    protected $namespace = 'newfold-onboarding/v1';
19
20    /**
21     * The endpoint base
22     *
23     * @var string
24     */
25    protected $rest_base = '/logogen';
26
27    /**
28     * Registers rest routes for LogoGenController class.
29     *
30     * @return void
31     */
32    public function register_routes() {
33        register_rest_route(
34            $this->namespace,
35            $this->rest_base . '/generate',
36            array(
37            'methods'             => \WP_REST_Server::CREATABLE,
38            'callback'            => array( $this, 'generate_logos' ),
39            'permission_callback' => array( Permissions::class, 'rest_is_authorized_admin' ),
40            'args'                => $this->get_generate_logos_args(),
41        ) );
42        register_rest_route(
43            $this->namespace,
44            $this->rest_base . '/generate/status',
45            array(
46                'methods'             => \WP_REST_Server::CREATABLE,
47                'callback'            => array( $this, 'get_generation_status' ),
48                'permission_callback' => array( Permissions::class, 'rest_is_authorized_admin' ),
49                'args'                => $this->get_generation_status_args(),
50            )
51        );
52        register_rest_route(
53            $this->namespace,
54            $this->rest_base . '/generate/more',
55            array(
56                'methods'             => \WP_REST_Server::CREATABLE,
57                'callback'            => array( $this, 'generate_more_logos' ),
58                'permission_callback' => array( Permissions::class, 'rest_is_authorized_admin' ),
59                'args'                => $this->get_generate_more_logos_args(),
60            )
61        );
62        register_rest_route(
63            $this->namespace,
64            $this->rest_base . '/generate/select',
65            array(
66                'methods'             => \WP_REST_Server::CREATABLE,
67                'callback'            => array( $this, 'select_logo' ),
68                'permission_callback' => array( Permissions::class, 'rest_is_authorized_admin' ),
69                'args'                => $this->get_select_logo_args(),
70            )
71        );
72    }
73
74    /**
75     * Get the arguments for the generate logos endpoint.
76     *
77     * @return array
78     */
79    public function get_generate_logos_args(): array {
80        return array(
81            'site_title' => array(
82                'type' => 'string',
83                'required' => true,
84            ),
85            'site_description' => array(
86                'type' => 'string',
87                'required' => true,
88            ),
89            'locale' => array(
90                'type' => 'string',
91                'required' => true,
92            ),
93        );
94    }
95
96    /**
97     * Get the arguments for the get generation status endpoint.
98     *
99     * @return array
100     */
101    public function get_generation_status_args(): array {
102        return array(
103            'reference_id' => array(
104                'type' => 'string',
105                'required' => true,
106            ),
107        );
108    }
109
110    /**
111     * Get the arguments for the generate more logos endpoint.
112     *
113     * @return array
114     */
115    public function get_generate_more_logos_args(): array {
116        return array(
117            'reference_id' => array(
118                'type' => 'string',
119                'required' => true,
120            ),
121        );
122    }
123
124    /**
125     * Get the arguments for the select logo endpoint.
126     *
127     * @return array
128     */
129    public function get_select_logo_args(): array {
130        return array(
131            'logo_reference_id' => array(
132                'type' => 'string',
133                'required' => true,
134            ),
135        );
136    }
137
138    /**
139     * Generate logos.
140     *
141     * @param \WP_REST_Request $request The request object.
142     * @return \WP_REST_Response
143     */
144    public function generate_logos( \WP_REST_Request $request ) {
145        $site_title = $request->get_param( 'site_title' );
146        $site_description = $request->get_param( 'site_description' );
147        $locale = $request->get_param( 'locale' );
148
149        $logogen_service = new LogoGenerationService();
150        $response = $logogen_service->generate( $site_title, $site_description, $locale );
151        if ( is_wp_error( $response ) ) {
152            return $response;
153        }
154
155        return new \WP_REST_Response( $response, 202 );
156    }
157
158    /**
159     * Get the generation status.
160     *
161     * @param \WP_REST_Request $request The request object.
162     * @return \WP_REST_Response
163     */
164    public function get_generation_status( \WP_REST_Request $request ) {
165        $reference_id = $request->get_param( 'reference_id' );
166
167        // Check the generation status.
168        $logogen_service = new LogoGenerationService();
169        $response = $logogen_service->generation_status( $reference_id );
170        if ( is_wp_error( $response ) ) {
171            return $response;
172        }
173
174        // If the generation is completed, add the logos to the response.
175        if ( $response['status'] === 'completed' ) {
176            $logos = $logogen_service->get_logos( true, true );
177            $response['logos'] = $logos;
178        }
179
180        return new \WP_REST_Response( $response, 200 );
181    }
182
183    /**
184     * Generate more logos.
185     *
186     * @param \WP_REST_Request $request The request object.
187     * @return \WP_REST_Response
188     */
189    public function generate_more_logos( \WP_REST_Request $request ) {
190        $reference_id = $request->get_param( 'reference_id' );
191
192        $logogen_service = new LogoGenerationService();
193        $response = $logogen_service->generate_more( $reference_id );
194        if ( is_wp_error( $response ) ) {
195            return $response;
196        }
197
198        return new \WP_REST_Response( $response, 202 );
199    }
200
201    /**
202     * Select a logo.
203     *
204     * @param \WP_REST_Request $request The request object.
205     * @return \WP_REST_Response
206     */
207    public function select_logo( \WP_REST_Request $request ) {
208        $logo_reference_id = $request->get_param( 'logo_reference_id' );
209
210        $logogen_service = new LogoGenerationService();
211        $response = $logogen_service->select( $logo_reference_id );
212        if ( is_wp_error( $response ) ) {
213            return $response;
214        }
215
216        return new \WP_REST_Response( $response, 200 );
217    }
218}